Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
5年前关闭。
Improve this question
我遇到了一些包含匿名类的代码。我以前从未见过匿名类,因此我对它们进行了一些研究。
我主要感兴趣的领域是java,因此我检查了Oracle's tutorial of anonymous classes.并理解了示例的要点,但我认为使用匿名类会使代码难以阅读,并且可能会引起很多麻烦。
是否在某些情况下不可避免地要使用匿名类或建议使用它们而不是命名类?
在此示例中,您将创建一个由线程运行的Runnable。如果您不使用匿名类,则必须按如下所示编写它:
并将其用作:
第一种可能是您可以直接看到该线程在做什么,第二种可能是您首先必须找到在此使用的类。
匿名类的另一个优点。 您可以执行以下操作:
您可以使用在定义匿名类的代码中声明的常量。如果要使用私有(private)内部类,则必须将这些常量提供给类的构造函数才能使用它们!
想改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
5年前关闭。
Improve this question
我遇到了一些包含匿名类的代码。我以前从未见过匿名类,因此我对它们进行了一些研究。
我主要感兴趣的领域是java,因此我检查了Oracle's tutorial of anonymous classes.并理解了示例的要点,但我认为使用匿名类会使代码难以阅读,并且可能会引起很多麻烦。
是否在某些情况下不可避免地要使用匿名类或建议使用它们而不是命名类?
最佳答案
不,您始终可以只使用私有(private)内部类而不是匿名类。
这在很大程度上取决于您如何使用匿名类。考虑以下示例:
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)内部类,则必须将这些常量提供给类的构造函数才能使用它们!
10-07 18:13