Javaは型消去を使用するため、実装は実際には型消去を使用することに注意してください。
Map<?, ?> = Map<Object, Object>
目的の型安全性を提供する安全なアクセサーメソッドを簡単に記述できます。たとえば、次のinstanceOf
チェックを行います。
public class InstanceMap extends HashMap<Class<?>, Object> {
public <T> T getInstance(Class<T> cls) {
Object o = super.get(cls);
if (o != null && cls.isInstance(o)) {
return (T) o;
} else {
return null;
}
}
public <T> void putInstance(Class<T> cls, T value) {
super.put(cls, value);
}
@Deprecated
public Object get(Object key) {
return super.get(key);
}
}
それ自体が汎用の型を使い始めない限り、これは問題なく機能します。Class<? super T>
その後、少し役立ちます。しかし、全体として、それはほとんどあなたに型安全性の誤った感覚を与えます。この種のマップは、あなたが慣れている強力な型安全性をあなたに与えません。結局、それはキャストに過ぎません。
私は以前にそのようなマップを使用しましたが、1〜2年間使用した後、最終的にはクリーンアップフェーズ中にコードからそれらを大幅に削除しました。それらはハックであり、私が期待したほど多くの利益を私に与えませんでした。