如果我写这个函数:
static <T> T getDefaultValue(Class<T> tClass) {
if(tClass == Integer.class) // or isAssignableFrom
return (T)Integer.valueOf(0);
...
}
我收到警告Type safety: Unchecked cast from Integer to T
,因为泛型被删除了。我可以通过使用Class.cast
来解决它:
static <T> T getDefaultValue(Class<T> tClass) {
if(tClass == Integer.class)
return tClass.cast(Integer.valueOf(0));
...
}
但是我找不到根据函数的泛型参数返回泛型类型的方法:
interface Thing<T> {...}
class ThingForInteger implements Thing<Integer> {...}
static <T> Thing<T> getThing(Class<T> tClass) {
if(tClass == Integer.class)
return [what?](new ThingForInteger());
...
}
除了导致警告的演员表之外,有没有办法做到这一点?
(另外,有没有办法进行Map<Class<?>, Thing<[class from key]>>
并从中获取实现,而不必禁止显示警告?
AFAIK,这足以没有警告:
static <T> Thing<T> getThing(Class<T> tClass) {
if (tClass == Integer.class) {
return (Thing) new ThingForInteger();
}
...