Почему я не могу сделать это с интерфейсами? - PullRequest
3 голосов
/ 17 февраля 2010

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

public interface PopulationMember extends Comparable<T extends PopulationMember>  {
    int compareTo(T o);
    T merge(T o);
    // Some other stuff
}

Кажется, что T должен быть классом, а не универсальным типом. Мой вопрос похож на этот , но не совсем то же самое. Суть всего этого в том, что я хочу иметь тип, в котором я могу сравнить его с другими объектами того же подтипа, не имея возможности сравнить их с любым другим объектом PopulationMember.

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010
interface PopulationMember<T extends PopulationMember> extends Comparable<T>  {
    ...
}

Вы указываете общие границы для текущего класса (интерфейса), а не для расширенного.

4 голосов
/ 17 февраля 2010

Попробуйте это:

public interface PopulationMember<T extends PopulationMember> extends Comparable<T> {
    int compareTo(T o);
    T merge(T o);
    // Some other stuff

}

Когда вы вводите параметр типа (как вы делаете для Comparable), вам необходимо указать класс. Если вы не хотите, чтобы это был определенный класс, вы можете параметризовать свой интерфейс.

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