在 Java7 API 引用 ( Java API 7 ) 中,File
类的函数 list()
具有以下签名:
public String[] list(FilenameFilter filter)
其中FilenameFilter
是一个接口(interface)。假设该函数在程序中的使用如下:
String[] list = new File(directory).list(new FilenameFilter() {
@Override
public boolean accept(File f, String s)
{
return s.endsWith(".java");
}
});
如您所见,我们正在匿名实例化一个接口(interface)。
如果我错了,请纠正我,但在 Java 中实例化接口(interface)是否有效?
我之所以问这个问题,是因为我认为接口(interface)是不可实例化的(因为接口(interface)没有构造函数),并且要使用接口(interface),您必须通过类来实现该接口(interface)。那么我们怎么可能实例化一个接口(interface)而不用这里的类实现呢?
谁能帮我找出我的逻辑错误吗?
最佳答案
您没有实例化接口(interface)。您正在实例化一个实现该接口(interface)的匿名类。
假设上面发布的代码位于文件 Foo.java
中,那么您将看到编译器的以下输出:
Foo.class
Foo$1.class
其中 Foo.class
显然是已编译的 Foo
类,而 Foo$1.class
是您在代码中使用的已编译的匿名类.
您可以在Java Language Specification, Chapter 15.9.5. Anonymous Class Declarations中找到具体信息。
关于java - 可实例化匿名Java接口(interface):Is it possible or am I wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478932/