当前位置: 首页 > 知识库问答 >
问题:

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

伯洋
2023-03-14
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]

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

共有1个答案

韩寂离
2023-03-14

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

  • 您正在使用树集
  • 的raw类型
  • 您的NumberComparator是泛型(Number是类型参数)

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

class NumberComparator implements Comparator<Number> {
    public int compare(Number o1, Number o2) {
        return 1;
    }
}
TreeSet set = new TreeSet(new NumberComparator());
TreeSet<Number> set = new TreeSet<Number>(new NumberComparator());
 类似资料:
  • 这是来自Java 以下是我的Java环境: java版本"1.8.0_60" Java(TM)SE运行时环境(build 1.8.0_60-b27) JavaHotSpot(TM)64位服务器VM(构建25.60-b23,混合模式)

  • 问题内容: 所以我在这里想要实现的功能与在此处实现的功能非常相似flexbox中项目的过渡弹性增长 但是我想知道如何用React做到这一点 当然,这会向它们两个都添加className,但是我要实现的是,其中一个随着动画而变大而另一个崩溃。而且我有2或10个元素都没关系 问题答案: 您可以在点击时设置活动索引:

  • 我试图实现一个排序和未排序的数组列表。两者都扩展了一个名为AbstractArrayMyList的类,该类包含常见的操作/实现——toString、clear等。。。。 下面是我的AbstractArrayMyList代码(它实现了我定义的通用接口) 我选择对elementData进行保护,以便排序和未排序的专用数组列表可以访问并对其执行操作。这是我对排序数组列表的声明/代码 这一切都很好。然而,

  • 我有这个代码: 它的工作是让我获得myObject集合中不止一次出现的对象。 我需要修改这段代码,使它给我的对象不仅在等式上匹配,而且在属性子集上匹配。 因此,如果具有属性,和。我希望过滤器给我满足以下条件的对象:和,还有另一个元素具有相同的值。

  • 我有一个在MongoDB Shell中工作的查询,但是当我增加要返回的文档数量时,它使用Spring Data MongoDB抛出聚合结果超过最大文档大小(16MB)异常。 以下是返回无误的shell查询: 以下是Spring数据片段: 当我限制在100或1000条记录时,一切正常。当我增加到10000时,会出现“聚合结果超过最大文档大小(16MB)”异常。 以下是我使用的版本供参考: 更新: 背

  • 问题内容: 为什么这句话没有例外? 它打印。但是方法应该抛出一个空指针异常。 问题答案: 您可以转换为任何引用类型,而不会出现任何异常。 该方法不会抛出空指针,因为它首先检查对象是否为空。如果为null,则仅打印字符串。否则它将调用该对象的方法。 添加更多详细信息:在输入对象上内部打印方法调用方法。在方法中,此检查有助于避免空指针异常: 为了避免混淆,如果不是特殊情况,则在null对象上调用任何方