java - 在 Java 的方法中使用类定义

标签 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 中是完全合法的。我有以下问题。

  1. 在方法中定义类有什么用?
  2. 是否会为 DummyClass
  3. 生成类文件
  4. 我很难以面向对象的方式来想象这个概念。在行为中具有类定义。可能有人可以通过等效的真实示例告诉我。
  5. 方法中的抽象类对我来说听起来有点疯狂。但不允许任何接口(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/

相关文章:

java - 在遵循 Google App Engine Java 教程时,无法正常使用电子邮件

java - 从 getItem() 制作对象并访问字段

java - 使用 Gson 序列化抽象类返回 null

java - Eclipse 中的 Maven "Update Project"操作导致 PMD "unable to find referenced rule"错误

Python子类在构造函数中使用父变量

c# - 如何在继承中获取特定的基类?

swift - NSTimer 无法在非 GameScene 的类中工作

c++ - 如何获取函数中定义的局部类的成员函数地址(C++)

c++ - 如果在函数模板中声明,局部类是否依赖?