加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么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来说太复杂了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读