2012-02-27 169 views

回答

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

本地內部類有一個很好的用法,就是你需要像匿名類的東西,但是你需要類有一個構造函數。 – 2012-02-27 11:17:27

+0

@MathiasSchwarz:你可以在大多數情況下使用初始化塊 - 你在構造函數中做什麼需要命名? – 2012-02-27 11:30:48

+1

是的,這是另一種方式。然而,這樣的初始化塊的'參數'需要在外部範圍(方法)中聲明爲最終。 – 2012-02-27 13:19:01

0

是的,它被稱爲地方內部類 - 你會發現在網絡搜索中使用這個術語的例子。

相關問題