泛型和类转换

时间:2012-11-18 23:10:24

标签: 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块中我们已经确定T == Integer,因此不知道返回Integer.TYPE是正常的,因此barfing。当然,我们总是可以明确地转换为Class<T>。问题是,这是否安全,因此我可以轻松添加@SuppressWarnings("unchecked")注释?

1 个答案:

答案 0 :(得分:0)

@SuppressWarnings("unchecked")在这里应该没问题:我们知道每个包装类W将其TYPE字段声明为Class<W>, - 可能只是添加注释来解释该理性。

请注意,Guava已经有Primitives.unwrap来处理此问题,以防您使用它。