2012-06-19 113 views
4

我看到這個符號,與類名稱的新運營商,然後括號中的代碼,偶見於Android的例子解釋了Java的符號「新」。有人可以解釋這個嗎?在下面的例子中,PanChangeListener是一個類(或者接口)和「新」創建一個實例,但什麼樣的作用呢括號內代碼戲相對於該PanChangeListener用括號代碼

fType pcListener = new PanChangeListener() { 

     @Override 
     public void onPan(GeoPoint old, GeoPoint current) { 
         //TODO 
     } 
}); 

即使是這個語法的名字也是有用的,因爲我可以谷歌它。

回答

7

這是一個anonymous class

的語法允許你創建一個新的類,提供了一些方法的實現,那麼實例化。

當只使用一次本地類時,請考慮使用匿名類語法,它將類的定義和使用置於完全相同的位置。

它的工作原理類似的方式,以下面的代碼不使用匿名類:

class MyPanChangeListener implements PanChangeListener() 
{ 
    @Override 
    public void onPan(GeoPoint old, GeoPoint current) { 
     //TODO 
    } 
} 

// ... 

fType pcListener = new MyPanChangeListener(); 
1

您所看到的匿名類這裏的創建。它正在創建(a)一個名爲PanChangeListener的接口的實現或者(b)該名稱的抽象類的一個子類。

+0

它仍然是完全合法的,如果PanChangeListener是一個普通的完全定義的類,只是少見(jUnits之外反正... :))。 – Affe

+0

@Affe - 只要普通完全定義的類不是最終的。 –