Java で Map を使用する必要があります。integer、boolean、long など、任意のタイプの値を指定できます。これは私が持っているものです:
Map<String, ?> prefs = Preferences.GetPrefs();
// Now I would like to use it to add new values...
prefs.put("Hi", true); // <-- error
どのように使用できますか?ありがとう
prefs
2 番目のジェネリック型引数を含むメソッドを呼び出すことはできません。これは、その型がコンテキストで不明であるためです。戻り値の型の背後にある意図Map<String ?>
は、「このマップは呼び出し元によって変更されるべきではない」ということです。
Map<String, ?>
明確な型ではなく、明確な型が一致するテンプレートとして読む必要があります。具体的には、「タイプされたキーMap<String, ?>
を持つそのようなマップ」を表します。String
たとえば、Map<String, Integer>
このテンプレートに一致し、変数に割り当てることができます。明らかに、String
そのようなマップに値を設定することは許可されていません。
メソッドが修正された場合、唯一の手段は、チェックされていないキャストを明確なジェネリック型GetPrefs
に強制し、型の安全性を失うことです。Map<String,Object>
それ以外の場合、クラスを制御している場合は、状況に応じて、Preferences
そのメソッドの戻り値の型を に変更します。Map<String, Object>
については?
、コレクションに型があることを意味しますが、それが何であるかはわかりません。つまり、(不明な) コレクション型と一致しない可能性があるため、コレクションに値を入れることはできません。
理由の例として、次のコードを検討してください。
Map<String, String> a = new HashMap<String, String>();
Map<String, ?> b = a;
a.put("bar", "baz"); // This is fine: Normal use
b.put("foo", 25); // This won't compile
String baz = a.get("bar"); // Returns the string "baz"
String twentyfive = a.get("foo"); // Return type is String, but the map would contain an Integer. Run-time exception.
オブジェクトを使用
Map<String, Object> prefs = Preferences.GetPrefs();
次にフェッチする
Boolean result = (Boolean)prefs.get("Hi");