java - 可以通过 Java 泛型类型系统强制执行自然排序吗?

标签 java generics types

TreeSet(Collection<? extends E> c)构造函数定义为:

Constructs a new tree set containing the elements in the specified collection, sorted according to the natural ordering of its elements. All elements inserted into the set must implement the Comparable interface. Furthermore, all such elements must be mutually comparable: e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the set.

是否可以在语法上强制 ECollection<? extends E>实现Comparable ?在上面的 JavaDoc 中,此检查推迟到执行时间...

最佳答案

是的,但不适用于构造函数;您必须公开一个工厂方法,该方法可以对集合类型施加超出整个类施加的约束。例如,他们可以写

public class TreeSet<E> { ...
  public static <E extends Comparable<? super E>> TreeSet<E>
      create(Collection<? extends E> collection) {
    TreeSet<E> set = new TreeSet<E>();
    set.addAll(collection);
    return set;
  }
  ...
}

关于java - 可以通过 Java 泛型类型系统强制执行自然排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773635/

相关文章:

Java小数部分被忽略

java - 我写了一个通用方法吗?

java - MySQL(谷歌云SQL) : User Access denied only from Java

java - 泛型错误 : not applicable for the arguments

generics - Rust说,即使设置了适当的生命周期,功能参数的生命周期也不够

用户定义类型的显示的 Haskell 实例 - 构造函数不在范围内

Swift 检查两个符合协议(protocol)的对象是否引用相同

haskell - 在 Haskell 中使用类型别名的正确方法是什么

java - 什么时候在 Java 中创建的本地引用中声明和初始化对象?

java - GWT 日志记录仅显示级别 SERVE