为什么Java的TreeSet没有指定其类型参数必须扩展可比性?
发布时间:2020-12-14 05:40:41 所属栏目:Java 来源:网络整理
导读:例如当第二个Object添加到TreeSet时,下面的代码会抛出ClassCastException.已经写了TreeSet,所以type参数只能是一个可比较的类型?即TreeSet不会编译,因为Object不可比较.仿制药实际上做了他们的工作 – 是类型安全的. import java.util.TreeSet;public class
例如当第二个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来说太复杂了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |