 
                            ...
| Code Block | ||
|---|---|---|
| 
 | ||
| class GameEntry implements Comparable {
  public enum Roshambo {ROCK, PAPER, SCISSORS}
  private Roshambo value;
  public GameEntry(Roshambo value) {
    this.value = value;
  }
  public int compareTo(Object that) {
    if (!(that instanceof RoshamboGameEntry)) {
      throw new ClassCastException();
    }
    GameEntry t = (GameEntry) that;
    return (value == t.value) ? 0
      : (value == Roshambo.ROCK && t.value == Roshambo.PAPER) ? -1
      : (value == Roshambo.PAPER && t.value == Roshambo.SCISSORS) ? -1
      : (value == Roshambo.SCISSORS && t.value == Roshambo.ROCK) ? -1
      : 1;
  }
}
 | 
...
| Code Block | ||
|---|---|---|
| 
 | ||
| class GameEntry {
  public enum Roshambo {ROCK, PAPER, SCISSORS}
  private Roshambo value;
  public GameEntry(Roshambo value) {
    this.value = value;
  }
  public int beats(Object that) {
    if (!(that instanceof RoshamboGameEntry)) {
      throw new ClassCastException();
    }
    GameEntry t = (GameEntry) that;
    return (value == t.value) ? 0
      : (value == Roshambo.ROCK && t.value == Roshambo.PAPER) ? -1
      : (value == Roshambo.PAPER && t.value == Roshambo.SCISSORS) ? -1
      : (value == Roshambo.SCISSORS && t.value == Roshambo.ROCK) ? -1
      : 1;
  }
}
 | 
...
Violating the general contract when implementing the compareTo() method can cause unexpected results, possibly leading to invalid comparisons and information disclosure.
| Rule | Severity | Likelihood | 
|---|
| Detectable | Repairable | Priority | Level | 
|---|---|---|---|
| MET10-J | Medium | Unlikely | No | 
| No | 
| P2 | L3 | 
Automated Detection
Automated detections of violations of this rule is infeasible in the general case.
| Tool | Version | Checker | Description | 
|---|---|---|---|
| Coverity | 7.5 | FB.RU_INVOKE_RUN | Implemented | 
Related Guidelines
| , Improper | 
| Following of | 
| Specification by | 
| Caller | 
Bibliography
...
...