2012-02-27 11 views
3

可能性の重複:
Use of class definitions inside a method in Javaメソッド内に内部クラスを持たせることはできますか?

たちはメソッドの内部で内部クラスを持つことができますか?

任意のコードサンプルが参考になります。

+4

あなたが実際にあなたが知っているこの自分を試してみてください...そしてもできます。http://stackoverflow.com/questions/2428186/use-of- class-definitions-inside-a-method-in-Java – Tudor

答えて

6

はいできます。

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. 
     } 
     } 
    } 
    } 

} 
8

はい、あなたがすることができます他のケースではメソッド内

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

    Foo foo = new Foo(); 
} 

私は、彼らが十分に良いしている匿名内部クラスを好む、しかしそれに対して推薦する、またはネストされたクラスないが。メソッド内に名前付きクラスが必要な場合は、それが宣言した余分なメンバーにアクセスする必要があることを示唆しています。これは面倒です。それを独自のネストされたクラスに分割する(理想的には静的にして、複数のコーナーケースを削除する)ことで、コードがより明確になります。

+0

ローカルの内部クラスには、匿名クラスのようなものが必要な場合でも、クラスにコンストラクタを必要とする場合など、良い使い方があります。 –

+0

@MathiasSchwarz:ほとんどのケースでイニシャライザブロックを使用できます。コンストラクタで何をしているのですか? –

+1

はい、これは別の方法です。しかし、そのようなイニシャライザブロックへの 'パラメータ'は、外側スコープ(メソッド)で最後に宣言する必要があります。 –

0

はい、これはローカル内部クラスと呼ばれています。この用語をウェブ検索で使用すると、例が見つかります。

関連する問題