2012-06-19 78 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 - 只要普通完全定义的类不是最终的。 –