这被称为本地类。
2是简单的一个:是的,将生成一个类文件。
1和3是同样的问题。你将使用一个本地类,你永远不需要实例化一个或知道实现细节在任何地方,但在一个方法。
典型的用法是创建一个接口的抛弃实现。例如,你会经常看到这样的:
//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());
关于接口:我不确定是否有一个技术问题,使本地定义的接口是一个问题的编译器,但即使没有,他们不会添加任何值。如果在方法外使用实现本地接口的本地类,则接口将是无意义的。如果一个本地类只在方法内部被使用,接口和类都将在该方法中实现,因此接口定义将是多余的。