Нет ничего в языке Java , который был удален между JDK5 и 6. Единственное, что было добавлено, как уже было сказано, это аннотация @Override
, допустимая для методы интерфейса - без ключевых слов. Поэтому, боюсь, у вас остаются различия в библиотеках как единственная причина, по которой вы можете вносить изменения.
Они существуют даже в основном API; в необычном порыве разгрома обратной совместимости они изменили сигнатуру некоторых методов в интерфейсе ExecutorService
. Это было потому, что общие сигнатуры методов были чрезмерно ограничительными. Это было чистое изменение библиотеки (хотя, будучи частью java.util
, симпатичной базовой библиотеки ); ничего общего с модификацией на уровне языка.
Например, из JDK5 :
<T> T invokeAny(Collection<Callable<T>> tasks)
до JDK6 :
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
Это означает, что любая программа, содержащая код , реализующий этот интерфейс в JDK5, не скомпилировалась бы с JDK6. Фрагмент легко создать; просто позвольте вашей IDE создать пустую реализацию интерфейса JDK5, а затем выполнить сборку с использованием JDK6.
Примечание: , что подстановочный знак был добавлен, потому что предыдущая версия не приняла бы параметр, подобный List<MyCallable<String>>
(то есть коллекция, набираемая некоторым подклассом вызываемого), тогда как более поздняя версия делает. *