【发布时间】:2014-03-13 22:04:37
【问题描述】:
我正在尝试用 Java 编写一个方法,该方法能够将自定义 Key 对象添加到数组中,或者更改数组中已经存在的键(如果有的话)。但是,我似乎无法让它工作。键将使用的类型主要是字符串和整数,但我的通用方法似乎不起作用。
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 ?)
【问题讨论】:
-
一个是
Key<Integer>,另一个是Key<String>,这怎么用!? -
@BoristheSpider 那么 if 语句会返回 false 吗?
-
设置初始化为什么?
-
编译器是怎么知道的?
-
您需要将接收者和生产者 both 强制转换为相同的类型。通过将泛型类型声明为
<?>,您声明您不关心该类型。您可以使用Object,但您不能提供,因为它可以是任何类型。例如,如果你要将k转换为Key<Object>,你可以设置任何东西。但如果k实际上是Key<Integer>,那么您稍后会得到一个随机的ClassCastException。