【问题标题】:Instantiable anonymous Java Intefrace:Is it possible or am I wrong?可实例化的匿名 Java 接口:有可能还是我错了?
【发布时间】:2013-07-04 22:42:35
【问题描述】:

在 Java7 API 参考 (Java API 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 中实例化一个有效的接口,请纠正我?

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

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

【问题讨论】:

    标签: java interface anonymous-class


    【解决方案1】:

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

    假设上面贴出的代码在文件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 中找到详细信息

    【讨论】:

    • @jlordo 感谢您的帮助。我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 2022-01-06
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多