任何类型的Java泛型<?>
我正在尝试用Java编写一个方法,该方法将能够向数组中添加自定义键对象,或者更改数组中已有的键(如果有)。然而,我似乎无法让它发挥作用。键将使用的类型主要是字符串和整数,但我的通用方法似乎不起作用
setValue()方法将T作为参数类型,getValue()返回T
public void set(Key<?> key) {
for (int i = 0; i < settings.size(); i++) {
Key<?> k = settings.get(i);
if (k.getName().equals(key.getName())) {
k.setValue(key.getValue()); // Error here
break;
}
}
settings.add(key);
}
错误(我正在使用Eclipse)是:
The method setValue(capture#4-of ?) in the type Key<capture#4-of ?>
is not applicable for the arguments (capture#5-of ?)
# 1 楼答案
Philip的诊断是正确的,但是您应该仍然能够声明泛型类型,然后使用它。就你而言
# 2 楼答案
您不能向java保证,如果您为
set()
方法提供了一个Key
对象,并且数组中有另一个同名的Key
对象,那么它们将具有相同的类型参数。所以java不能在编译时检查代码的类型安全性所以,我认为,你应该在这里使用Raw Types