2012-05-31 42 views
2
Class clazz = new Object(){}.getClass(); 

爲什麼這是可能的,它是什麼意思?有人能提醒我嗎?java的語法像對象(){}

例如:

public class Testing { 
    public static void main(String[] args) { 
     Class clazz = new Object(){}.getClass(); 
     System.out.println(clazz); 
    } 
} 

結果是:class Testing$1

回答

4

它創建一個匿名內部類子類Object。主要使用我見過一個空的身體是吉斯中,爲TypeLiteral,在那裏它被用來捕捉泛型類型參數:

key = new TypeLiteral<List<String>>() {}; 

這是因爲類型擦除適用於超在這裏是非常有用的,所以Guice能夠得到List<String>的一部分,它不能被表示爲普通的類文字。

9

new Object(){}創建anonymous inner class,作爲Object一個子類。它是Testing的一個內部類,因此它得到了一個編譯器生成的名稱,就像你看到的那樣。

1

它同下面的代碼:

public class Testing{ 
     private class Anon extends Object{ 
     } 
     public static void main(String[] args) { 
      Class clazz = new Anon().getClass(); 
      System.out.println(clazz); 
     } 
} 

Testing$1是類的名字,它是在類測試定義的第一個匿名類。

這些匿名類可用於在您使用它的地方實現接口,並且它們可以訪問本地最終變量。

final String text = "Written by new Thread"; 
Thread thread = new Thread(new Runnable(){ 
    public void run(){ 
     System.out.println(text); 
}}); 
thread.start();