<分区>
我遇到了一些包含匿名类的代码。我以前没有接触过匿名类,所以我对它们做了一些研究。
我主要感兴趣的领域是 java,所以我检查了 Oracle's tutorial of anonymous classes.我理解这个机制并且我明白了示例的意义,但在我看来使用匿名类会使代码难以阅读并且会引起很多麻烦。
是否存在无法避免使用匿名类或建议使用匿名类而不是命名类的情况?
<分区>
我遇到了一些包含匿名类的代码。我以前没有接触过匿名类,所以我对它们做了一些研究。
我主要感兴趣的领域是 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/