Java - 递归泛型类型定义

时间:2011-08-20 12:22:09

标签: java generics interface

我尝试使用ISortableStack创建一个界面<E extends comparable <E>>,但我无法继续前进。以下是做什么的?

<E extends Comparable<E>> 

我已经尝试了this,但它无济于事。

3 个答案:

答案 0 :(得分:4)

<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);
  }
}

答案 1 :(得分:2)

如果你问这是什么意思:

<E extends Comparable<E>> 

这意味着传入的类'E'必须实现Comparable接口。

答案 2 :(得分:1)

<>字符是“通用”语法的一部分。标准库充满了“通用”接口;请查看Set interface以获取示例。