Определение интерфейса, который реализует сопоставимые - PullRequest
1 голос
/ 29 ноября 2011

Я пытаюсь определить интерфейс так, чтобы все реализующие классы были сопоставимы с собой и своими подклассами.

Например, рассмотрим:

public interface Rating implements Comparable<Rating> {}

Это означает, что реализующие классы должны быть сопоставимы со всеми рейтингами:

public class A implements Rating {
    public int compareTo(Rating r) {return 0;}
}

Я хотел бы ослабить это требование, чтобы я мог определить класс как:

public class A implements Rating {
    public int compareTo(A a) {return 0;}
}

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Я ожидаю, что вы пытаетесь получить что-то вроде этого:

public class Rating implements Comparable<? extends Rating> {
   ...
}

или, может быть (хотя я не уверен, что вы можете сделать это):

public interface Rating extends Comparable<? extends Rating> {
   ...
}

См. эту страницу в Oracle для получения дополнительной информации об ограниченных подстановочных знаках.

0 голосов
/ 29 ноября 2011
  1. Я предполагаю, что вы, вероятно, хотите, чтобы ваш "compareTo ()" возвращал что-то, кроме "0";)

  2. Вы можете использовать "instanceof", чтобы увидеть, является ли произвольный объект каким-то конкретным классом (или подклассом)

  3. Я не уверен, что перегрузка «compareTo ()» обязательно хорошая идея. Возможно, вы даже захотите сделать входной аргумент «Объект o».

ИМХО .. ПСМ

...