Почему getSelectedItem() не является общим для JComboBox? - программирование
Подтвердить что ты не робот

Почему getSelectedItem() не является общим для JComboBox?

JCombobox в Java 7 обновлен для использования генериков - я всегда думал, что это немного надзор, что этого еще не было, поэтому мне было приятно видеть это изменение.

Однако, пытаясь использовать JCombobox таким образом, я понял, что методы, которые я ожидал использовать эти общие типы еще только вернули Object.

Почему это так? Мне кажется, это глупое дизайнерское решение. Я понимаю, что базовый ListModel имеет общий getElementAt() метод, поэтому я буду использовать это вместо этого, но это немного окольный путь что-то похожее на то, что оно могло быть изменено на самом JComboBox.

4b9b3361

Ответ 1

Я полагаю, вы ссылаетесь на getSelectedItem()?

Причина в том, что, если поле со списком доступно для редактирования, выбранный элемент не обязательно содержится в модели резервной копии и не ограничивается общим типом. Например. если у вас есть редактируемый JComboBox<Integer> с моделью [1, 2, 3], вы все равно можете ввести "foo" в компоненте, а getSelectedItem() вернет строку "foo", а не объект типа Integer.

Если поле со списком недоступно для редактирования, вы всегда можете отнестись к cb.getItemAt(cb.getSelectedIndex()) для обеспечения безопасности типа. Если ничего не выбрано, это вернет null, что соответствует поведению getSelectedItem().

Ответ 2

Вот безопасная версия:

public static <T> T getSelectedItem(JComboBox<T> comboBox)
{
    int index = comboBox.getSelectedIndex();
    return comboBox.getItemAt(index);
}