4

Java のジェネリックについて基本的な質問があります。マップの次の 2 つの初期化の違いは何ですか?

        Map<String, String> maplet1 = new HashMap<String, String>();

        Map<String, String> maplet2 = new HashMap();

最初の初期化がオブジェクト構築でジェネリックを指定していることは理解していますが、後者のオブジェクト構築 (maplet2) ではなく、これを行うことの根本的な影響を理解していません。実際には、コードが maplet1 構造を使用しているのを常に見てきましたが、他のものよりもそれを行うことがどこで有益なのかわかりません。

4

3 に答える 3

5

2 番目Mapは生の型に割り当てられ、コンパイラの警告が発生します。最初のバージョンを使用するだけで、警告を排除できます。

詳細については、次を参照してください:生の型とは何ですか? なぜそれを使用すべきではないのですか?

于 2013-02-27T23:45:56.980 に答える
2

最初のものは型安全です。

菱形演算子 を使用して、右辺を簡略化できます<>。この演算子は、割り当ての左側から型パラメーターを推測します。

Map<String, String> maplet2 = new HashMap<>();

于 2013-02-27T23:47:04.810 に答える
1

消去の概念を理解しましょう。RUNTIMEHashMap<String, String>()HashMap()HashMap で表されるものは同じです。

(Raw Type)に変換HashMap<String,String>するプロセスは Erasure と呼ばれます。HashMap

Generics を使用しないと、 Map の値を毎回明示的に String にキャストする必要があります。

ジェネリックを使用すると、キャストを排除する必要があります。

Generics を使用しない場合、将来の開発者が別のタイプのオブジェクトを挿入する可能性が高くなります。 ClassCastException

于 2013-02-27T23:51:29.483 に答える