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
不表示基元类型或其包装器,我将返回输入。还是安全的,对吧?是的-对不起,我读得不够仔细。实际上,连接番石榴的方法似乎也有同样的行为。