Java - рекурсивные определения родовых типов - PullRequest
0 голосов
/ 20 августа 2011

Я пытался создать интерфейс ISortableStack, используя <E extends comparable <E>>, но я не могу двигаться вперед.Что делает следующее?

<E extends Comparable<E>> 

Я пробовал это , но это не помогает.

Ответы [ 3 ]

4 голосов
/ 20 августа 2011

<E extends Comparable<E>> означает, что E должен быть типом, который знает, как сравнивать себя с , следовательно, определение рекурсивного типа.

public class Comparables {

  static class User implements Comparable<User> {
    @Override
    public int compareTo(User user) {
      return 0;
    }
  }

  /**
   * This class cannot be used with Collections.sort because an
   * UncomparableUser is not comparable with itself. However, notice
   * that you get no compiler error just for implementing
   * Comparable<String>.
   */
  static class UncomparableUser implements Comparable<String> {
    @Override
    public int compareTo(String user) {
      return 0;
    }
  }

  public static void main(String[] args) {
    List<User> users = Arrays.asList(new User());

    // Using this would cause a compiler error
    // List<UncomparableUser> users = Arrays.asList(new UncomparableUser());

    Collections.sort(users);
  }
}
2 голосов
/ 20 августа 2011

Если вы спросите, что это значит:

<E extends Comparable<E>> 

Это означает, что передаваемый класс E должен реализовывать интерфейс Comparable.

1 голос
/ 20 августа 2011

Символы < и > являются частью "общего" синтаксиса.Стандартная библиотека заполнена "универсальными" интерфейсами;для примера рассмотрим интерфейс Set .

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