我正在尝试对旧代码进行格式化,并且有一些代码,在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")
注释?
答案 0 :(得分:0)
@SuppressWarnings("unchecked")
在这里应该没问题:我们知道每个包装类W
将其TYPE
字段声明为Class<W>
, - 可能只是添加注释来解释该理性。
请注意,Guava已经有Primitives.unwrap
来处理此问题,以防您使用它。