Обобщения Java JComboBox

недавно я немного больше читал о Java Generics и пришел к этой статье: http://gafter.blogspot.nl/2004/09/puzzling-through-erasure-answer.html, в котором говорится, что Java всегда будет обратно совместима.

Итак, что Java сделала с JComboBox? Код написан на Java 7, т.е. JComboBox<String> comboBox = new JComboBox<>(); должен отлично компилироваться в Java 6, но затем как необработанный тип, поскольку тип был стерт.

Однако, как вы легко можете увидеть при поиске в Google, теперь есть три разные проблемы:

  • Во-первых, Java 6 не компилируется на Generics, тогда как он должен делать это со стиранием типа и рассматривать его как необработанный тип.
  • Во-вторых, не используется даже реификация, поэтому в Java 7 ничего не получается.
  • И, в-третьих, код Java 7, использующий необработанные типы, выдает предупреждения.

Так что, похоже, нет правильного пути.

С Уважением.


person skiwi    schedule 23.07.2013    source источник
comment
Что ж, алмазный оператор введен в Java 7, поэтому я не уверен, почему вы говорите: он должен нормально компилироваться в Java 6. Потому что не будет.   -  person Erik Pragt    schedule 23.07.2013
comment
@ErikPragt Я мог подумать иначе ... Значит, я ошибся?   -  person skiwi    schedule 23.07.2013
comment
stackoverflow.com/a/4692743/604478. Если вы хотите скомпилировать более старую версию, вы должны использовать параметр -target.   -  person Alberto    schedule 23.07.2013


Ответы (1)


Вы можете указать целевой уровень языка и целевой уровень байт-кода. Таким образом, вы можете использовать все языковые функции определенной версии и скомпилировать ее с определенной версией vm. Я протестировал ваш пример со следующими настройками: уровень языка 7, байт-код версии 6, и он отлично компилируется.

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

person morpheus05    schedule 23.07.2013