4

この表記法は、Androidの例では、クラス名と括弧で囲まれたコードを持つ新しい演算子です。誰かがこれを説明できますか?以下の例では、PanChangeListenerはクラス(またはおそらくインターフェイス)であり、「new」はインスタンスを作成しますが、括弧で囲まれたコードはPanChangeListenerに関してどのような役割を果たしますか?

fType pcListener = new PanChangeListener() {

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

この構文の名前でさえ、Googleで検索できるので便利です。

4

2 に答える 2

7

それは匿名のクラスです。

この構文を使用すると、新しいクラスを作成し、いくつかのメソッドの実装を提供して、それをインスタンス化できます。

ローカルクラスを1回だけ使用する場合は、匿名クラス構文の使用を検討してください。これにより、クラスの定義と使用がまったく同じ場所に配置されます。

これは、匿名クラスを使用しない次のコードと同じように機能します。

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 に答える