java - 泛型和类转换

标签 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;
    // 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/

相关文章:

java - 使用 Java 在 Android 上解密 OpenSSL 加密的文件

swift - 在 Swift 中使用具有约束关联类型的协议(protocol)作为属性

c# - 如何在 MVVMCross 中注册泛型类型

c# - 从集合中通用创建逗号分隔的字符串列表

javascript - 删除所有标签并创建一个包装内部 html javascript 的新元素

java - 如何正确地 "pause"应用程序直到 Java 中的状态发生变化?

Java DOM : Get all parents list

java - 具有 3 输出专用网关的 BPMN 图在 Camunda 中不起作用

.net - 从具有不同 GUID 的 .Net 引用 COM+

javascript - wrapper 在 Firebug 中是什么意思?