как я могу реализовать Comparable более одного раза? - PullRequest
13 голосов
/ 21 апреля 2010

Я обновляю некоторый код до Java 5 и явно не понимаю что-то с Generics. У меня есть другие классы, которые реализуют Comparable один раз, который я смог реализовать. Но теперь у меня есть класс, который из-за наследования пытается реализовать Comparable для 2 типов. Вот моя ситуация:

У меня есть следующие классы / интерфейсы:

interface Foo extends Comparable<Foo>

interface Bar extends Comparable<Bar>

abstract class BarDescription implements Bar

class FooBar extends BarDescription implements Foo

При этом я получаю сообщение об ошибке «Сопоставимый интерфейс не может быть реализован более одного раза с разными аргументами ...»

Почему я не могу реализовать CompareTo (Foo foo) в FooBar, а также CompareTo (Bar) в BarDescription? Разве это не просто перегрузка метода?

Редактировать: у меня есть много классов, которые расширяют BarDescription. Если я удаляю параметр типа для Comparable on Bar, оставляя его в исходном состоянии, то я получаю кучу предупреждений компилятора при сортировке всех классов, которые расширяют BarDescription. Будет ли это решено с ответом подстановочных знаков ниже? Этот ответ выглядит довольно сложным и трудным для понимания.

Ответы [ 3 ]

14 голосов
/ 21 апреля 2010

Общих не существует после компиляции байт-кода.

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

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

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>
8 голосов
/ 21 апреля 2010

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

1 голос
/ 21 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...