Обобщения Java с любым типом <?>

1

Я пытаюсь написать метод в 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 ?)
Теги:
generics
wildcard

1 ответ

0
Лучший ответ

Вы не можете гарантировать java, что если вы предоставите объект Key вашему методу set() и есть еще один объект Key в массиве с тем же именем, то они будут иметь один и тот же аргумент типа. Поэтому java не может проверить безопасность вашего кода во время компиляции.

Итак, я думаю, вы должны использовать Raw Types здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню