3

効果的な Java 2nd Editionでは、新しいコードで生の型を使用すべきではないと述べています。また、チェックされていないキャストの警告をすべて排除し、そのような警告を抑制することを選択した場合はその安全性を証明して文書化する必要もあります。

ただし、未加工の型と未チェックのキャストをタイプ セーフな方法で組み合わせる特定の使用法を繰り返し見てきました。最も典型的な形式では、次のようになります。

  • static final生の型で宣言され、不変オブジェクトを参照するフィールド
  • チェックされていないキャストを使用して、このフィールドのパラメーター化されたstaticバージョンを返すジェネリック メソッド

この「パターン」の最も有名な例は、次の場所にありjava.util.Collectionsます。

質問は次のとおりです。

  • このイディオムは何と呼ばれていますか?
  • このイディオムが以前に議論された信頼できるソースはどれですか?

こちらもご覧ください

  • 有効な Java 2nd Edition
    • 項目 23: 新しいコードで生の型を使用しない
    • 項目 24: 未確認の警告を削除する
4

1 に答える 1

1

あなたの3つの例では、実際に起こっているのはメモリの最適化です。空のCollection場合、パラメータ化された型に依存するものに依存せずに、クラスの動作のサブセットを使用しているため、生のインスタンスを再利用できます。

emptyList()次のように書くことができます

private static <T> List<T> emptyList() {
    return new EmptyList<T>();
}

動作の唯一の違いは、Collections.emptyList() == Collections.emptyList()false を返すことです。

これが名前が付けられているかどうかはわかりませんが、ドキュメントの観点からは、「パラメーター化された動作は必要ないため、静的インスタンスを再利用できます」などのコメントがほぼカバーしています。

于 2010-10-19T07:28:18.067 に答える