2016-07-15 19 views
-4

私が匿名のクラスについて知っているのは、あなたがクラスやインターフェースを持っていて、いくつかのクラスやインターフェースを実装またはオーバーライドする必要があるときです。匿名で、プログラムの読みやすさが向上します。しかし、私はちょっと混乱しています。将来、あなたは別のクラスのために同じインターフェースを実装する必要があると仮定します。その場合、前のクラスをリファクタリングする必要があるので、匿名クラスの他のアドバンテージがありますか?(パフォーマンスが向上しますか?)JavaのAnonymousクラスの使用例と利点は何ですか?

+4

http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java – Unknown

+0

どのように使い勝手と利点が異なるのか、私はそれがどのようにパフォーマンスを改善するか尋ねました。 –

+1

@Faizan http://stackoverflow.com/questions/3028341/java-anonymous-class-efficiency-implications –

答えて

2

これはどういう意味ですか?

匿名クラスは、その名前が何を意味するのか、名前はありません。これはクラスdeclarationとクラスのinstanceの作成を1つのステップで結合します。 匿名クラスには名前がないため、匿名クラスが定義されているクラスの外部からオブジェクトをインスタンス化することはできません。実際、匿名オブジェクトは、定義されているのと同じスコープ内からのみインスタンス化することができます。

なぜ匿名クラスを使用するのですか?

匿名のクラスは、時間を節約し、の数を減らすことができます。 javaアプリケーションを定義するために必要なファイルComparatorのような特定の状況でのみ使用されるクラスがあるかもしれません。これにより、オブジェクトの「オンザフライ」作成が可能になります。

匿名クラスを使用することをお勧めします。多くの人が広範囲に使用してlistenersを​​に実装しています。

匿名クラス定義

の構文この例では、コレクションクラスのソート()メソッドに渡されたコンパレータの匿名クラスの定義を示しています。 aListは、ソートされるべきデータの有効なリストであると仮定する。

Collections.sort (aList, 
    new Comparator() { // implements the IF 
     public int compare (ObjectType o1, ObjectType o2) throws ..{ 
      //.... implementation for compare() 
     } // end of compare() 
    } // end of Comparator implementation 
); // closed paren for sort() and end of statement semicolon 

ルール:

匿名クラスは常にスーパークラスを拡張するか、インターフェイスを実装しますが、それは明示的に拡張または句を実装することはできません必要があります。

匿名クラスは、すべての抽象メソッドをスーパークラスまたはインターフェイスに実装する必要があります。

匿名クラスは、常にインスタンスを作成するためにスーパークラスのデフォルトのコンストラクタを使用します。

+0

これの少なくとも一部は他のソースからそのままコピーされています。例えば、 http://androidhello.com/androidEbooks/Android-Java.php?Ebooks-Android=2649 - クレジットが必要な場合は、クレジットを記入してください。 –

関連する問題