1

我正在尝试生成旧代码,并且有一些代码在给定类似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是可以的,因此令人讨厌。当然,我们总是可以显式转换为Class<T>. 问题是,这个演员表是否安全,因此我可以放心添加@SuppressWarnings("unchecked")注释?

4

1 回答 1

0

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

请注意,Guava已经必须Primitives.unwrap为您处理这个问题,以防您使用它。

于 2012-11-18T23:18:51.160 回答