2016-03-18 20 views
2

私は自分自身にJavaを教えていますが、本当に楽しんでいますが、私は「匿名クラス」のテーマに遭遇しました。いつ、どこでこれを使用するのかを理解しようとしています。非常に人気のあるクラスですが、私はそれの周りに私の頭を得るように見えない、私はそれらを作成する方法を理解しています。しかし、ちょっとした情報を探していたので、クラスで実装することができます。匿名クラス、いつ、どこ?

私は実際にいくつかの例を考えていただきたいと思います。

+2

私は何かをテストするためにいくつかの簡単なクラスを書くつもりでない限り、私は一般的にペストTBHのようにそれらを避けます。彼らはどんな意味でも必要ではありません。完全な実稼働環境では、それらは一般的には必要でなく、望ましくなく、コードを不必要に複雑にするだけです。控えめなクラスを控えめなファイルで書くだけで、仕事や懸念を分けることができます。しかし、一部の人々はそれらのためのより多くの使用を見つけるかもしれません。私は、非常に基本的なテスト目的や、ActionListenerなどを実装するほんのわずかな匿名の非常に細かいクラスを除いて、無用に近いと思います。 – ManoDestra

+4

java.utilのコレクションライブラリでコードを読むことをお勧めします。これにはたくさんの例があります。また、java.langのすべてのクラスを読むことをお勧めします。あなたは、どれだけ多くの人が最も一般的な図書館の情報源をも読んでいないことに驚かれるでしょう。 ;) –

+0

Java 8では、ほとんどの目的と目的のために、匿名クラスがラムダ式に置き換えられていると思います。匿名のクラスを理解することは、従来のコードを読んで維持する上で重要です。 – scottb

答えて

8

まず、には匿名のクラスが必要です。名前付きクラスはいつでも作成できます。あなたが始めているとき、匿名クラスについて学ぶ主な理由は、あなたが読んだコードでそれらを認識することです。

オブジェクトを作成して一度だけ使用する場合は、匿名クラスを使用します。主に、Swingなどのイベント駆動型プログラミングで便利です。あなたのイベントハンドラは、通常、プラグインしているコントロールに固有のワンオフであるため、名前を付けることはありません。

イベントハンドラの場合、周囲のオブジェクトにアクセスする必要があるのが一般的です。イベントハンドラが内部クラスであると便利です。周囲のコンテキストへの参照は、まったく再利用できないことを意味します。

良い開始例はthe Oracle Java tutorialです。 java.ioパッケージのFileFilterクラスとFilenameFilterクラスは、匿名クラスでよく使用され、フィルタが返すファイルを指定します。

Java 8 lambdasでは、1つのメソッドでクラスの1回限りのインスタンスを作成するより良い方法を提供します。

+1

非常に良い投稿+1。多くの場合、特にイベント駆動型コードでは、匿名クラスが一度記述されても、そのインスタンスはイベントまたは呼び出しごとに一度作成されてから破棄されます。このような場合、匿名クラスを静的定数または列挙型に割り当てるか、名前付きクラスを使用して、匿名クラスを繰り返しインスタンス化するのではなく、そのクラスを使用して、リソースの利用効率を向上させます。 – scottb

+0

@scottb:私はその事例を考えることはできませんが、匿名インスタンスを定数に割り当てることは確かにOKです。 –

+0

説明のためにありがとう、私はこのような簡単な質問をすることで迷惑だと感じていますが、私は可能な限り多くのことを学びたいので、私はjava内の仕事を申請するときに仕事中に適応し学ぶことができますあなたの入力を感謝し、私にリンクを与える、それは本当に助けになりました –

0

名前付きクラスSomeClassを作成した場合は、new SomeClassを一度書き込むだけでよく、匿名クラスを使用する方が意味があることがよくあります。

クラスの本体が短い場合(それ以外の場合は可読性に問題があります)、代わりにラムダまたはメソッド参照を使用できない場合にのみこれを行う必要があります。

+1

* "あなたは一度新しいSomeClassを書く必要があることを理解しています" * ...今まで*同じクラスを複数回書く? – scottb

+0

@scottb私は同じクラスを一度しか書くことについて話しているわけではありません、私はコンストラクターを1つの場所で呼び出すことを話しています。 –