как я могу реализовать Сопоставимый несколько раз?

Я обновляю некоторый код до 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. Это было бы решено с подстановочным ответом ниже? Тот ответ выглядит довольно сложным и трудным понять для обслуживания.

14
задан user26270 21 April 2010 в 20:41
поделиться

3 ответа

Наличие нескольких реализаций универсальных интерфейсов может привести к проблемам при рассмотрении подстановочных знаков.

Это не зависит от стирания.

1
ответ дан 1 December 2019 в 12:26
поделиться

Универсальные шаблоны не существуют после компиляции байт-кода.

Ограничения из этого: Вы не можете реализовать / расширить два или более интерфейса / класса, которые были бы одинаковыми без универсального параметра и отличались бы от универсального параметра.

Что вы могли бы сделать, если действительно хотите безопасность типов:

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>
14
ответ дан 1 December 2019 в 12:26
поделиться

Я бы написал пару Comparator и покончил с этим.

8
ответ дан 1 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: