java - 可实例化匿名Java接口(interface):Is it possible or am I wrong?

标签 java interface anonymous-class

在 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 中,那么您将看到编译器的以下输出:

  1. Foo.class
  2. 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/

相关文章:

java - Spring 数据 : default 'not deleted' logic for automatic method-based queries when using soft-delete policy

java - 在java中使用map continue问题进行整数到单词的转换

c# - 与 .net 中的 Web 服务共享接口(interface)

java - 该 Java 结构有什么作用?

c++ - 是否可以在分配期间在 C++ 中给出一个类的定义,这在 Java 中是允许的

java - 没有数据库时使用 ADF 模型层的好处

java - HTML WebView 上使用键盘时如何隐藏 ImageView

java - 是否可能有类似 : MyClass<T extends Enum<T> : implements IMyInterface> 的内容

C# 如何在不使方法静态化的情况下调用接口(interface)内另一个类的方法?

java - 如何在另一个生成字节码类中使用匿名类实例