例:
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
这称为本地课程。
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());
关于接口:我不确定是否存在使本地定义的接口成为编译器问题的技术问题,但是即使没有,它们也不会增加任何价值。如果在方法之外使用了实现本地接口的本地类,则该接口将毫无意义。如果只在方法内部使用本地类,则接口和类都将在该方法内实现,因此接口定义将是多余的。