从Class <T>到Thing <T>的类型安全映射

Joo*_*kka 4 java generics mapping type-safety

我想制作一个具有以下界面的地图类容器:

public <T> Thing<T> get(Class<T> clazz);
public <T> void put(Class<T> clazz, Thing<T> thing);
Run Code Online (Sandbox Code Playgroud)

有趣的是,T每个Class<T>- > Thing<T>对中的s 是相同的T,但容器应该能够容纳许多不同类型的对.最初我尝试了一个(哈希)地图.但是,例如,

Map<Class<T>, Thing<T>>
Run Code Online (Sandbox Code Playgroud)

是不对的,因为那个地图中的所有都是T一样T的.当然,

Map<Class<?>, Thing<?>>
Run Code Online (Sandbox Code Playgroud)

工作,但后来我没有类型安全保证,所以当我get(String.class),我不能确定我得到一个Thing<String>实例.

有没有一种明显的方法来实现我正在寻找的那种类型的安全性?

Boz*_*zho 5

地图本身不能保证,但如果您只通过上述方法访问它,您将获得所需的安全性.

  • @Joonas:这就是你如何做高级型技巧; 做一些编译器认为稍微不安全的东西,但实际上这是正常的,因为你在更高的层次上做了安全保证.你还需要一个`@SuppressWarnings("unchecked")`来阻止编译器对它的呻吟. (2认同)