首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可否认的匿名Java Intefrace:这是可能的还是我错了?

不可否认的匿名Java Intefrace:这是可能的还是我错了?
EN

Stack Overflow用户
提问于 2013-07-04 22:42:35
回答 1查看 259关注 0票数 2

在Java7 API引用(Java 7)中,有一个具有签名的File类的函数list()

代码语言:javascript
复制
public String[] list(FilenameFilter filter)

其中FilenameFilter是一个接口。假设在程序中使用此函数,如下所示:

代码语言:javascript
复制
String[] list = new File(directory).list(new FilenameFilter() {

     @Override
     public boolean accept(File f, String s) 
     {
        return s.endsWith(".java"); 
     } 
});

如您所见,我们正在匿名地实例化一个接口。

如果我错了,但是在Java中实例化一个接口,请纠正我吗?

我之所以问这个问题,是因为我认为接口是不可实例化的(因为接口没有构造函数),而对于使用接口,则必须通过类实现该接口。那么,我们怎么可能在没有类实现的情况下实例化一个接口呢?

有人能好心地帮我找出我逻辑上的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-04 22:46:26

您不是在实例化接口。您正在实例化一个匿名类,它实现了该接口。

假设上面发布的代码位于文件Foo.java中,那么您将看到编译器的以下输出:

  1. Foo.class
  2. Foo$1.class

其中,Foo.class显然是已编译的Foo类,而Foo$1.class是您在代码中使用的已编译的匿名类。

您将在Java语言规范,第15.9.5章。匿名类声明中找到详细信息

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17478932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档