任何类型的 Java 泛型 <?>

标签 java generics wildcard

我正在尝试用 Java 编写一种方法,该方法能够将自定义 Key 对象添加到数组中,或者更改数组中已有的键(如果有)。但是,我似乎无法让它发挥作用。键将使用的类型主要是 String 和 Integer,但我的通用方法似乎不起作用。

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 ?)

最佳答案

您无法向 java 保证,如果您向 set() 方法提供一个 Key 对象,并且还有另一个 Key数组中具有相同名称的对象,它们将具有相同的类型参数。所以java无法在编译时检查代码的类型安全性。

所以,我认为,你应该使用 Raw Types在这里。

关于任何类型的 Java 泛型 <?>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22391964/

相关文章:

mysql - 不搜索字段和进行 %""% 搜索之间的区别

java - 改变牙套的样式

java - 从 json 映射到对象时得到错误的结果

java - 如何在 spring-integration 中模拟 InboundAdapter?

java - 通用扩展类和实现接口(interface)

delphi - 如何在字典中存储类型?

javascript - 正则表达式通配符问题

java - 如何将对象返回到仍打开的前一帧?

Java:检查泛型是否为 int

c# - 泛型双接口(interface)