例子:
public class TestClass {
public static void main(String[] args) {
TestClass t = new TestClass();
}
private static void testMethod() {
abstract class TestMethod {
int a;
int b;
int c;
abstract void implementMe();
}
class DummyClass extends TestMethod {
void implementMe() {}
}
DummyClass dummy = new DummyClass();
}
}
我发现上面这段代码在 Java 中是完全合法的。我有以下问题。
- 在方法中定义类有什么用?
- 是否会为
DummyClass
生成类文件
- 我很难以面向对象的方式来想象这个概念。在行为中具有类定义。可能有人可以通过等效的真实示例告诉我。
- 方法中的抽象类对我来说听起来有点疯狂。但不允许任何接口(interface)。这背后有什么原因吗?
最佳答案
这称为本地类。
2 比较简单:是的,会生成一个类文件。
1 和 3 是同一个问题。您将使用一个本地类,您无需在任何地方实例化一个或了解实现细节,而是在一种方法中。
一个典型的用途是创建一些接口(interface)的一次性实现。例如,您经常会看到这样的内容:
//within some method
taskExecutor.execute( new Runnable() {
public void run() {
classWithMethodToFire.doSomething( parameter );
}
});
如果您需要创建一堆这些并用它们做一些事情,您可以将其更改为
//within some method
class myFirstRunnableClass implements Runnable {
public void run() {
classWithMethodToFire.doSomething( parameter );
}
}
class mySecondRunnableClass implements Runnable {
public void run() {
classWithMethodToFire.doSomethingElse( parameter );
}
}
taskExecutor.execute(new myFirstRunnableClass());
taskExecutor.execute(new mySecondRunnableClass());
关于接口(interface):我不确定是否存在使本地定义的接口(interface)成为编译器问题的技术问题,但即使没有,它们也不会增加任何值(value)。如果在方法之外使用实现本地接口(interface)的本地类,则该接口(interface)将毫无意义。如果本地类只在方法内部使用,那么接口(interface)和类都将在该方法中实现,因此接口(interface)定义将是多余的。
关于java - 在 Java 的方法中使用类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428186/