1
我试图generify旧代码,并有一些代码,其中给予类似Integer.class
,它返回Integer.TYPE
(反之亦然),等等其余的包装(如果输入不是包装,它返回输入类)。这似乎是转换的候选人(如果它不存在的话)。所以,我有这样的事情:泛型和类转换
public static <T> Class<T> convert(Class<T> type) {
if (type == Integer.class) return Integer.TYPE;
// and so on
return type;
}
这段代码的问题是,编译器不会,本身知道,在if块,我们已确定T == Integer
,因此不知道返回Integer.TYPE
是的,因此barfing。当然,我们总是可以明确地投到Class<T>
。问题是,这个投射是否安全,因此我可以很舒服地添加@SuppressWarnings("unchecked")
注解?
如问题中所述,如果'type'不代表原始类型或其包装器,则返回输入。还是安全的吧? –
是的 - 抱歉,没有仔细阅读。实际上,链接的番石榴法似乎具有相同的行为。 –