Я обновляю некоторый код до Java 5 и ясно не понимаю что-то с Дженериками. У меня есть другие классы, которые реализуют Сопоставимый однажды, который я смог реализовать. Но теперь у меня есть класс, который, из-за наследования, заканчивает тем, что пытался реализовать Сопоставимый для 2 типов. Вот моя ситуация:
У меня есть следующие классы/интерфейсы:
interface Foo extends Comparable<Foo>
interface Bar extends Comparable<Bar>
abstract class BarDescription implements Bar
class FooBar extends BarDescription implements Foo
С этим я добираюсь, ошибка 'интерфейс Comparable не может быть реализована несколько раз с различными аргументами...'
Почему у меня не может быть compareTo (Нечто нечто) реализованный в FooBar и также compareTo (Панель), реализованная в BarDescription? Разве эта просто перегрузка метода не?
Править: У меня есть много классов, которые расширяют BarDescription. Если я удаляю параметр типа для Сопоставимого на Панели, оставляя его в необработанном состоянии, то я получаю набор предупреждений компилятора при сортировке всех классов, которые расширяют BarDescription. Это было бы решено с подстановочным ответом ниже? Тот ответ выглядит довольно сложным и трудным понять для обслуживания.
Наличие нескольких реализаций универсальных интерфейсов может привести к проблемам при рассмотрении подстановочных знаков.
Это не зависит от стирания.
Универсальные шаблоны не существуют после компиляции байт-кода.
Ограничения из этого: Вы не можете реализовать / расширить два или более интерфейса / класса, которые были бы одинаковыми без универсального параметра и отличались бы от универсального параметра.
Что вы могли бы сделать, если действительно хотите безопасность типов:
interface Foo<T extends Foo<?>> extends Comparable<T>
interface Bar<T extends Bar<?>> extends Comparable<T>
abstract class BarDescription<T extends Bar<?>> implements Bar<T>
class FooBar extends BarDescription<FooBar> implements Foo<FooBar>