【问题标题】:Can we have an inner class inside a method? [duplicate]我们可以在方法内部有一个内部类吗? [复制]
【发布时间】:2012-02-27 11:11:50
【问题描述】:

可能重复:
Use of class definitions inside a method in Java

我们可以在方法中包含内部类吗?

任何代码示例都会有所帮助。

【问题讨论】:

标签: java inner-classes


【解决方案1】:

是的,你可以。

public final class Test {
  // In this method.
  private void test() {
    // With this local variable.
    final List<String> localList = new LinkedList<String>();
    // We can define a class
    class InnerTest {
      // Yes you can!!
      void method () {
        // You can even access local variables but only if they are final.
        for ( String s : localList ) {
          // Like this.
        }
      }
    }
  }

}

【讨论】:

    【解决方案2】:

    是的,您可以:

    public static void main(String[] args) {
        class Foo implements Runnable {
            @Override public void run() {
                System.out.println("Hello");
            }
        }
    
        Foo foo = new Foo();
    }
    

    我建议不要这样做,在其他情况下更喜欢匿名内部类,它们足够好,或者嵌套类 not 在方法内。如果您需要一个方法中的命名类,这表明您需要获取它声明的额外成员,这会变得混乱。将其分离到自己的嵌套类中(理想情况下将其设为静态,以消除一堆极端情况)通常会使代码更清晰。

    【讨论】:

    • 本地内部类有一个很好的用途,即您需要匿名类之类的东西但您需要该类具有构造函数的情况。
    • @MathiasSchwarz:在大多数情况下,您可以使用初始化程序块 - 您在构造函数中做了什么需要命名?
    • 是的,这是另一种方法。但是,此类初始化程序块的“参数”需要在外部范围(方法)中声明为 final。
    【解决方案3】:

    是的,它被称为 本地内部类 - 您可以通过在网络搜索中使用该术语来找到示例。

    【讨论】:

      【解决方案4】:

      是的,它被称为本地类:Java Language Specification

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2016-12-30
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多