gpt4 book ai didi

java - 为什么在将元素添加到 TreeSet 时我没有得到类转换异常或其他东西

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:23 24 4
gpt4 key购买 nike

下面是我的代码

class NumberComparator<Number> implements Comparator<Number> {
public int compare(Number o1, Number o2) {
return 1;
}
}

public class Ex28 {
public static void main(String[] args) {
TreeSet set = new TreeSet(new NumberComparator<Number>());
set.add(1);
set.add(1.4f);
set.add(1L);
set.add("1a");
System.out.println(set);
}
}

因为我已经定义了我自己的 Number 类型的比较器,但是当我向它添加任何其他字符串时,它不会给我任何异常。它工作正常。我得到的输出为

[1, 1.4, 1, 1a]

谁能解释一下为什么会这样。

最佳答案

问题是一些不良做法的混合体:

  • 您正在使用 TreeSet 的原始类型
  • 您的NumberComparator 是通用的(Number 是类型参数)

事实上 Number 在这里是一个类型参数,这意味着类型删除意味着您实际上不会转换为真正的 Number 类型。

如果您将比较器更改为:

class NumberComparator implements Comparator<Number> {
public int compare(Number o1, Number o2) {
return 1;
}
}

和您的调用代码:

TreeSet set = new TreeSet(new NumberComparator());

然后我希望有一个异常(exception)。

此外,如果您将代码更改为不使用原始类型:

TreeSet<Number> set = new TreeSet<Number>(new NumberComparator());

然后你会得到一个编译时错误。

关于java - 为什么在将元素添加到 TreeSet 时我没有得到类转换异常或其他东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12001946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com