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