作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试泛化旧代码,并且有一些代码,例如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 block 中我们已经确定 T == Integer
,因此不知道返回 Integer.TYPE
没关系,因此呕吐。当然,我们总是可以显式转换为 Class<T>
。问题是,这个强制转换是否安全,因此我可以放心地添加 @SuppressWarnings("unchecked")
注释?
最佳答案
@SuppressWarnings("unchecked")
这里应该没问题:我们知道每个包装类 W
声明其 TYPE
字段为Class<W>
, - 可能只是添加一条注释来解释这个合理性。
请注意Guava已有 Primitives.unwrap
为您处理这个问题(如果您正在使用它)。
关于java - 泛型和类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445600/
我是一名优秀的程序员,十分优秀!