java - 什么时候使用匿名类?

标签 java oop anonymous-class

<分区>

我遇到了一些包含匿名类的代码。我以前没有接触过匿名类,所以我对它们做了一些研究。

我主要感兴趣的领域是 java,所以我检查了 Oracle's tutorial of anonymous classes.我理解这个机制并且我明白了示例的意义,但在我看来使用匿名类会使代码难以阅读并且会引起很多麻烦。

是否存在无法避免使用匿名类或建议使用匿名类而不是命名类的情况?

最佳答案

Are there any cases when it is unavoidable to use anonymous classes

不,您总是可以只使用私有(private)内部类而不是匿名类。


using anonymous classes makes the code hard to read and can cause a lot of headache

这在很大程度上取决于您如何使用匿名类。考虑以下示例:

new Thread(new Runnable() {
    @Override
    public void run() {
        // do something
    }
}).start();

在此示例中,您创建了一个由线程运行的 Runnable。如果您不使用匿名类,则必须按如下方式编写:

private class SomeClass implements Runnable {
    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
}

并将其用作:

new Thread(new SomeClass()).start();

在第一种可能性中,您可以直接看到该线程在做什么,在第二种可能性中,您首先必须找到此处使用的类。


匿名类的另一个优势。您可以执行以下操作:

// define some constant which can be used in the anonymous class:
final String someStr = "whatever";

new Thread(new Runnable() {
    @Override
    public void run() {
        // use the String someStr directly
        System.out.println(someStr);
    }
}).start();

您可以使用在定义匿名类的代码中声明的常量。如果您要使用私有(private)内部类,则必须将这些常量提供给该类的构造函数才能使用它们!

关于java - 什么时候使用匿名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33997169/

相关文章:

java - 为什么我的测试文件系统只能在内存中工作?

java - 如何在运行时使用不同版本的库?

java - 如何将元素添加到已创建的 JList(Netbeans 生成)

java - 为什么静态上下文中的匿名类有效

java - ZIP文件的AES加密不正确的第2个16字节 block

java - BitmapFont 的自定义 actor (libgdx)

Swift, "subclass"UITableView 的数据源方法不知何故?

javascript - 对 filter() 函数感到困惑,我需要深入的解释

java - 匿名类实例中的最终参数存储在哪里?

c++ - 如何将模板类限制为仅具有类型别名的特定专业