bra*_*boy 100 java class local-class
例:
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中完全合法.我有以下问题.
DummyClassJac*_*son 68
这称为本地类.
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());
关于接口:我不确定是否存在使本地定义的接口成为编译器问题的技术问题,但即使没有,也不会添加任何值.如果在方法外部使用了实现本地接口的本地类,则该接口将毫无意义.如果本地类只在该方法中使用,那么接口和类都将在该方法中实现,因此接口定义将是多余的.
从方法外部看不到类(即实例化,其方法在没有反射的情况下访问).此外,它可以访问testMethod()中定义的局部变量,但在类定义之前.
我实际上想:"不会写这样的文件." 直到我试过它:哦,是的,这样的文件被创建了!它将被称为A $ 1B.class,其中A是外部类,B是本地类.
特别是对于回调函数(GUI中的事件处理程序,比如单击Button时的onClick()等),通常使用"匿名类" - 首先是因为你最终会得到很多.但有时候匿名类不够好 - 尤其是你不能在它们上定义构造函数.在这些情况下,这些方法本地类可以是一个很好的选择.
| 归档时间: | 
 | 
| 查看次数: | 75899 次 | 
| 最近记录: |