Как создать JComboBox с ключевым словом «new» и без угловых скобок? - PullRequest
2 голосов
/ 07 июля 2019

Я пытаюсь создать какое-нибудь маленькое приложение (на практике, что я прочитал). Я использую JComboBox компоненты. В соответствии с Java API JComboBox требуются угловые скобки (<E>). Удивительно, но использование JComboBox без <> также работает. Я пытаюсь понять, как это работает?

Я еще не выучил "Generic" (как это работает в фоновом режиме, как для универсального класса), только использовал их.

String[] season = {"Winter","Summer","Spring","Fall"};
JComboBox someComboBox = new JComboBox(season);

Это работает, пока я ожидал ошибку компиляции, но уведомляет меня, что мне нужно было указать объект в скобках.

1 Ответ

1 голос
/ 08 июля 2019

Поскольку Java 7 JComboBox является универсальным типом , это означает, что при объявлении переменной этого типа вы должны выполнить вызов универсального типа , предоставив аргумент типа , который представляет «тип элементов этого поля со списком» [из API] .

В вашем случае это означает:

JComboBox<String> someComboBox = new JComboBox<>(season);

Интересно, что Учебное пособие по Java на JComboBox , по-видимому, не было обновлено до общей версии JComboBox.

Если по той или иной причине вы хотите использовать JComboBox без вызова универсального типа, это все еще возможно, потому что Java поддерживает использование необработанных типов .

необработанным типом является имя универсального классаили интерфейс без каких-либо аргументов типа.

Таким образом, вы можете использовать тип JComboBox raw как:

JComboBox someComboBox = new JComboBox(season);

Хотя это не рекомендуется, если вы просто хотите поэкспериментировать или следовать учебному пособию, тогда оно должноничего страшного.

Если вы обнаружите, что предупреждения компилятора отвлекают, вы можете избавиться от них, соответствующим образом установив свойства ошибки / предупреждения компилятора в вашей IDE.Кроме того, вы можете избавиться от них, используя аннотацию @ SuppressWarnings .Если это поддерживается вашим компилятором, добавление экземпляра аннотации в ваш код должно избавить от предупреждения:

@SuppressWarnings({"rawtypes","unchecked"})
JComboBox box = new JComboBox(season);

См. Также этот пост для получения дополнительной информации о @SuppressWarnings.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...