gpt4 book ai didi

java - 为什么 Number 不使用 Comparable/Comparator

转载 作者:行者123 更新时间:2023-12-02 04:52:24 26 4
gpt4 key购买 nike

简短问题;

我已经阅读了 Comparable 和 Comparator 的 Javadocs,但我不明白它们之间的区别。 Comparable 会抛出 NullPointerException,而 Comparable 是由更多的类实现的,因此它的方法更容易使用,这是唯一的区别吗?

我的问题的第二部分是为什么 Number 不实现 Comparable 而像 BigDecimal 这样的东西却实现了?看来只有 AtomicInteger 和 AtomicLong 没有从 Number 类实现 Comparable。这是为什么吗?为什么“原子”类不具有可比性?

长问题;

我问这个是因为我正在尝试从 J-Interop 获取 JIVariant 将其转换为对象(可能是 boolean 值、字符串或数字),以便于显示并在返回时执行切换,如果它是数字我希望使用关系运算符来确定它与每个单独的比较运算符。

我的测试表明,除非您使用 Comparable 的compareTo(),否则无法比较非基元。

我很想将数字转换为不太通用的数字,以便为我提供所需的功能,但我担心溢出和内存使用情况。我正在考虑使用 BigDecimal,但我知道 float 有浮点精度问题。更有经验的 StackOverflow 成员会如何处理这个问题?

最佳答案

当一个类实现Comparable时,只有一个compareTo()方法。您不能在一个类中定义两个或多个compareTo() 方法。如果您想比较其他一些值怎么办?然后,您可以使用比较器接口(interface)实现新类,以将其与其他值一起使用。在这种情况下,比较器接口(interface)可以提供帮助。

Number 是一个抽象类 - 没有什么可以比较的。此类由 Integer、Double 等具体类扩展 - 这些类具有要比较的具体值。

这是一个如何使用这两个接口(interface)的很好的例子: http://javarevisited.blogspot.com/2011/06/comparator-and-comparable-in-java.html

关于java - 为什么 Number 不使用 Comparable/Comparator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095192/

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