4

我看到这种表示法,一个带有类名的新运算符,然后是括号中的代码,偶尔出现在 Android 示例中。有人可以解释一下吗?在下面的示例中,PanChangeListener是一个类(或者可能是一个接口),并且“new”创建了一个实例,但是括号中的代码相对于PanChangeListener 起什么作用?

fType pcListener = new PanChangeListener() {

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

甚至这种语法的名称也会很有用,因为我可以谷歌它。

4

2 回答 2

7

那是一个匿名类

该语法允许您创建一个新类,为某些方法提供实现,然后实例化它。

当本地类只使用一次时,考虑使用匿名类语法,将类的定义和使用放在完全相同的位置。

它的工作方式与以下不使用匿名类的代码类似:

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

// ...

fType pcListener = new MyPanChangeListener();
于 2012-06-19T23:09:45.067 回答
1

你在这里看到了一个匿名类的创建。它正在创建(a)名为接口的实现PanChangeListener或(b)该名称的抽象类的子类。

于 2012-06-19T23:09:52.940 回答