maa*_*nus 1 java comparable java-8
在Comparable的契约中,没有任何东西强迫一个对象与它自己相比较。只是
强烈推荐,但不严格要求 (x.compareTo(y)==0) == (x.equals(y))
这意味着,它的建议对于x.compareTo(x)不扔。但是可以写一个
class X implements Comparable<Y> {
...
}
Run Code Online (Sandbox Code Playgroud)
其中X和Y是两个不相关的类。我看不出它有什么好处,但在 Java 8 版本中HashMap甚至有相应的检查。
X implements Comparable<Y>使用两个不相关的类来实现?我想答案是肯定的和否定的,但这只是一个猜测
Comparable促进比较应该与相等一致的合同,即(a.compareTo(b) == 0) == a.equals(b)。但这并不强迫您这样做,任何奇怪的合同都可以执行。
所以你可以创建一个:
class DumbInteger implements Comparable<DumbInteger> {
private final int i;
public DumbInteger(int i) { this.i = i; }
public int compareTo(DumbInteger di) { return 0; }
public boolean equals(Object other) { /* checks */ return other.i == this.i; }
}
Run Code Online (Sandbox Code Playgroud)
你也可以创建一个:
class DumberInteger implements Comparable<String> {
private final int i;
public DumberInteger(int i) { this.i = i; }
public int compareTo(String s) { return 0; }
public boolean equals(Object other) { /* checks */ return other.i == this.i; }
public static void main(String[] args) {
System.out.println(new DumberInteger(0).compareTo("abc"));
}
}
Run Code Online (Sandbox Code Playgroud)
但这样做可能没有意义。在任何情况下,这都不是 Java 8 特有的,因为 Comparable 接口自 Java 2 以来就存在并在 Java 5 中“通用”。
但这可能不是 Comparable 接口本身的缺陷,因为我认为 Java 中没有办法创建I<T>只能由T.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |