Я пытаюсь написать метод в 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, что если вы предоставите объект Key
вашему методу set()
и есть еще один объект Key
в массиве с тем же именем, то они будут иметь один и тот же аргумент типа. Поэтому java не может проверить безопасность вашего кода во время компиляции.
Итак, я думаю, вы должны использовать Raw Types здесь.