Java 泛型与类转换
我正在尝试泛化旧代码,有一些代码,给定类似于Java 泛型与类转换,java,generics,wrapper,primitive,unchecked,Java,Generics,Wrapper,Primitive,Unchecked,我正在尝试泛化旧代码,有一些代码,给定类似于Integer.class,它会返回Integer.TYPE(反之亦然),对于其余的包装器也是如此(如果输入不是包装器,它会返回输入类)。这似乎是一个转换的候选者(如果它还不存在的话)。所以,我有这样的想法: public static <T> Class<T> convert(Class<T> type) { if (type == Integer.class) return Integer.TYPE;
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(type==Integer.class)返回Integer.type;
//等等
返回类型;
}
这段代码的问题是,编译器本身不知道在if块中我们已经确定了T==Integer
,因此不知道返回Integer.TYPE
是正确的,因此会出错。当然,我们总是可以显式地强制转换到类
。问题是,这个强制转换是否安全,因此我可以轻松地添加@SuppressWarnings(“unchecked”)
注释?@SuppressWarnings(“unchecked”)
应该可以:我们知道每个包装类W
都将其类型
字段声明为类,-可能只是添加一条注释来解释这一合理性
请注意,如果您正在使用它,就必须为您处理此问题。如问题中所述,如果type
不表示基元类型或其包装器,我将返回输入。还是安全的,对吧?是的-对不起,我读得不够仔细。实际上,连接番石榴的方法似乎也有同样的行为。