为什么 Java Boolean 实现了 Comparable?

Joã*_*ues 7 java boolean-algebra

在Java中,运营商<>>=<=不是为原始定义的boolean类型。但是,相应的包装类Boolean实现了Comparable. 也就是说:true > false 是一个错误,但Boolean.TRUE.compareTo(Boolean.FALSE) > 0很好。

怎么来的?语言设计者改变主意了吗?那为什么要保持语无伦次的行为呢?

尽管随意,但我可以想到为布尔值定义总顺序的优点。有什么缺点吗?

jur*_*rez 2

编程语言不是数学结构。它们是复杂的项目,跨越多年,需要很多不同的人。因此,它们会受到观点、遗产、分歧、炒作周期、其他语言的影响、沟通不畅的影响,不幸的是有时还会出现错误和愚蠢。你可能会争辩说,大多数关于语言的决定实际上都是任意的。

你的问题完全正确:为什么会这样?不幸的是,不询问做出相关承诺的人他们还记得多少,这并不是一个真正可行的选择。所以你的猜测和其他人的一样好。

事情就是这样,但你有权有自己的意见。遗憾的是,在某些情况下,当人们放弃一种语言并创建一种新语言时,这种不一致可能会令人沮丧。但由于计算机是物理的、有限的东西,任何新语言也将是不完美的和固执己见的。

如果你问我,启用总排序boolean是一个好主意 - 它不会伤害任何人,但在某些(尽管非常有限)情况下它可以提供一些有限的好处。但 Java 还存在更多、更大的问题。就目前情况而言,我认为 Oracle 不会冒险通过改变这种行为来破坏任何现有程序。

  • @nicomp:当然是 - 但在无意义的硬件位级别上,而不是在我们希望它们成为的抽象级别上。我们所做的任何抽象都会泄漏——也就是说,它们都有一个崩溃的点。我知道,因为我尝试过,但如果您不相信,请自行尝试。 (2认同)