2

在 Java7 API 参考(Java API 7)中有一个具有签名list()的类函数:File

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 中实例化一个有效的接口,请纠正我?

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

谁能帮我找出我的逻辑错误?

4

1 回答 1

3

您没有实例化接口。您正在实例化一个实现该接口的匿名类。

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

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

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

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

于 2013-07-04T22:46:26.630 回答