在Java7 API引用(Java 7)中,有一个具有签名的File
类的函数list()
:
public String[] list(FilenameFilter filter)
其中FilenameFilter
是一个接口。假设在程序中使用此函数,如下所示:
String[] list = new File(directory).list(new FilenameFilter() {
@Override
public boolean accept(File f, String s)
{
return s.endsWith(".java");
}
});
如您所见,我们正在匿名地实例化一个接口。
如果我错了,但是在Java中实例化一个接口,请纠正我吗?
我之所以问这个问题,是因为我认为接口是不可实例化的(因为接口没有构造函数),而对于使用接口,则必须通过类实现该接口。那么,我们怎么可能在没有类实现的情况下实例化一个接口呢?
有人能好心地帮我找出我逻辑上的错误吗?
发布于 2013-07-04 14:46:26
您不是在实例化接口。您正在实例化一个匿名类,它实现了该接口。
假设上面发布的代码位于文件Foo.java
中,那么您将看到编译器的以下输出:
Foo.class
Foo$1.class
其中,Foo.class
显然是已编译的Foo
类,而Foo$1.class
是您在代码中使用的已编译的匿名类。
您将在Java语言规范,第15.9.5章。匿名类声明中找到详细信息
https://stackoverflow.com/questions/17478932
复制相似问题