为什么Java的TreeSet没有指定其类型参数必须扩展可比性?

前端之家收集整理的这篇文章主要介绍了为什么Java的TreeSet没有指定其类型参数必须扩展可比性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如当第二个Object添加到TreeSet时,下面的代码会抛出ClassCastException.已经写了TreeSet,所以type参数只能是一个可比较的类型?即TreeSet不会编译,因为Object不可比较.仿制药实际上做了他们的工作 – 是类型安全的.
import java.util.TreeSet;
public class TreeSetTest {
  public static void main(String [] args) {
   TreeSet<Object> t = new TreeSet<Object>();
   t.add(new Object());
   t.add(new Object());
  }
}

解决方法

如果该类型必须是可比较的,则无法创建具有不可比较类型和比较器的TreeSet(可以像现在这样).

一种同时保持类型安全性的方法一直是有两个类:一个具有可比较的类型参数,一个具有不可比较的类型参数,没有默认构造函数(只有构造函数使用比较器),但是假设java开发人员不想引入基本上做同样的事情的两个类(虽然可以很容易地被实现为围绕另一个的包装).

另一个(可以说是更清晰的方法)是扩展类型系统,以便某些构造函数仅在与某些类型参数一起使用时才存在(即,如果类型参数是可比较的,默认构造函数才存在),但是我想这将使通用系统对于java来说太复杂了.

猜你在找的Java相关文章