gpt4 book ai didi

java - 比较方法违反了其一般契约异常java 7

转载 作者:行者123 更新时间:2023-12-01 14:41:38 26 4
gpt4 key购买 nike

下面的代码在 Java 6 上运行时会抛出“Java Comparison 方法违反了其一般约定”。但是,在 Java 7 上它不会抛出相同的异常。有什么问题吗?如何修改此代码以在 Java 7 上也引发异常?

class ComparableScore implements Comparable<ComparableScore> {

private int score;
private String itemName;

int getScore() {
return score;
}

void setScore(int i) {
score = i;
}

String getItemName() {
return itemName;
}

void setItemName(String str) {
itemName = str;
}

public int compareTo(ComparableScore another) {
if (score == another.getScore())
return this.getItemName()
.compareToIgnoreCase(another.getItemName());
else if ((score) > another.getScore())
return 1;
else
return -1;
}

@Override
public boolean equals(Object o) {
final ComparableScore other = (ComparableScore) o;

if (score == other.getScore()
&& this.getItemName().equalsIgnoreCase(other.getItemName()))
return true;
else
return false;
}
}

最佳答案

这与 Java“bug”相关 - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7193557

不过这不是一个错误,而是一个功能。 sort 的新 Java 实现告诉您,您的 compareTo 方法已损坏。

但是,错误报告指出该异常是在 Java 7 上引发的,而不是在 Java 6 上引发的。检查 Java 6 源代码也证实了这一点。该消息不会出现在 Arrays.sort 的源代码中,这是在 Java 6 中实现排序代码的地方。

<小时/>

如果您的目标是破坏您的代码,从而在 Java 7 中发生异常,那么:

  • 目前没有抛出异常,因为契约(Contract)没有被破坏。 (或者至少,不是以我所看到的任何明显方式......)

  • 我不知道触发异常的具体条件。

  • 尝试一些实验(即使用 compareToequals 的不同实现,以不同的方式违反约定)或阅读 Java 7 源代码来找出答案对于你自己来说,什么会导致它......可重复。

  • (为什么,为什么,为什么你要这么做???)

关于java - 比较方法违反了其一般契约异常java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15897892/

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