我有课
class Property<T> {
value T;
public void setValue(T value) {
this.value = value;
}
}
现在我有一个列表 List<Property<?>> properties
具有各种类型的各种属性。我循环遍历这个列表并想要设置每个属性的值。因此,我需要将通用属性转换为正确的类型,例如:
例如对于整数:
if (property.getType().equals("Integer")) {
Property<Integer> propInt = (Property<Integer>) property;
propInt.setValue((Integer) values[i++]);
}
哪里values[]
是一个对象数组,其中包含我要设置的值。
一切正常,但 Java 提示类型安全“未检查从 Property<?>
到 Property<Integer>
的转换”。像这样的支票
if (property instanceof Property<Integer>){...}
但这是不可能的。 我如何更改我的代码以消除此警告,或者您知道针对我的情况有更好的做法吗?
最佳答案
编译器提示是因为 property
类型为Property<?>
可以是或不能是 Property<Integer>
类型一般来说。这是当前 java 语言由于类型删除而固有的限制。
在这种特殊情况下,您要确保 property
属于类别Property<Integer>
通过使用 getType
方法,因此可以安全地忽略警告。
if (property.getType().equals("Integer")) {
// we have made sure property is of class Property<Integer> so the cast is type safe
@SuppressWarnings("unchecked")
Property<Integer> propInt = (Property<Integer>) property;
propInt.setValue((Integer) values[i++]);
}
用注释来记录它很重要,否则同行评审您的代码可能不会注意到强制转换确实是类型安全的,并且可能会将警告抑制误认为是一种不当行为。
关于java - Java 中转换为泛型类时的类型安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648685/