rspec/rules/S1210/java/rule.adoc
Fred Tingaud 51369b610e
Make sure that includes are always surrounded by empty lines (#2270)
When an include is not surrounded by empty lines, its content is inlined
on the same line as the adjacent content. That can lead to broken tags
and other display issues.
This PR fixes all such includes and introduces a validation step that
forbids introducing the same problem again.
2023-06-22 10:38:01 +02:00

63 lines
1.4 KiB
Plaintext

== Why is this an issue?
According to the Java ``++Comparable.compareTo(T o)++`` documentation:
____
It is strongly recommended, but not strictly required that ``++(x.compareTo(y)==0) == (x.equals(y))++``.
Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact.
The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."
____
If this rule is violated, weird and unpredictable failures can occur.
For example, in Java 5 the ``++PriorityQueue.remove()++`` method relied on ``++compareTo()++``, but since Java 6 it has relied on ``++equals()++``.
=== Noncompliant code example
[source,java]
----
public class Foo implements Comparable<Foo> {
@Override
public int compareTo(Foo foo) { /* ... */ } // Noncompliant as the equals(Object obj) method is not overridden
}
----
=== Compliant solution
[source,java]
----
public class Foo implements Comparable<Foo> {
@Override
public int compareTo(Foo foo) { /* ... */ } // Compliant
@Override
public boolean equals(Object obj) { /* ... */ }
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Override "equals(Object obj)" to comply with the contract of the "compareTo(T o)" method
'''
== Comments And Links
(visible only on this page)
include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]