有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

任何类型的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 ?)

共 (2) 个答案

  1. # 1 楼答案

    Philip的诊断是正确的,但是您应该仍然能够声明泛型类型,然后使用它。就你而言

    public <T> void set(Key<T> key) {
        for (int i = 0; i < settings.size(); i++) {
            Key<T> k = settings.get(i);
            if (k.getName().equals(key.getName())) {
                k.setValue(key.getValue()); // Error here
                break;
            }
        }
        settings.add(key);
    }
    
  2. # 2 楼答案

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

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