Должен ли я всегда придерживаться договора, установленного для Comparable Interface
? Существует ли приемлемое плечо, когда все три случая контракта неясны?Java Сопоставимый контракт
Контракт просто заявляет:
If this object precedes that; return negative value
If this object equals that; return zero
If this object proceeds that; return positive value
Я хочу, чтобы сравнить две точки, которые Point2D
объекты. Сравнение двух точек с использованием поведения distance(Point2D point)
приводит к появлению двоичного кода compareTo()
; Либо две точки имеют нулевое расстояние, либо их расстояние отличное от нуля.
Если бы я написать такую compareTo()
поведение, которое перекрывает по умолчанию, возможно, это будет выглядеть следующим образом:
private Point2D location;
public int compareTo(Object o)
{
if(this.getLocation().distance(o.getLocation() == 0)
{
return 0;
}
else
{
return 1;
}
}
Возможно, сравнивающие два объекта Point2D бы лучше подходит, используя простое расстояние тестирования поведения и не заморачиваться реализации Comparable
. Возможно, даже есть способ присоединиться к контракту, которого я не знаю.
Это зависит от вас, чтобы определить, что означает «предшествует», «равно» и «продолжается» означает в вашем контексте. До тех пор, пока вы поддерживаете правило, что если a> b и b> c, a> c и эквивалент с <и =. –
(И должно быть верно, что если a> b, то b
Например, вы можете заказать, исходя из расстояния от источника или какой-либо другой контрольной точки. –