Метод автоматической проверки согласованности equals, hashCode и compareTo?

Я хорошо осведомлен о договорных требованиях, чтобы убедиться, что hashCodeсовместим с equalsи что equalsсогласован с сравните с . Однако это часто нарушается на практике. Существуют ли какие-либо инструменты, методы или библиотеки, которые могут автоматически проверять эту согласованность?

К сожалению, я подозреваю, что ответ «нет», но было бы полезно иметь модульный тест для такого рода вещей, который мог бы использовать библиотечный вызов или фреймворк, а не писать собственный тест. вручную для каждого случая, где это важно.

В случае, если непонятно, что я имею в виду под согласованностью, для hashCodeи equalsя имею в виду следующее:

Если два объекта равны в соответствии с equals(Object ), то вызов метода hashCode для каждого из двух объектов должен привести к одному и тому же целочисленному результату.

Для equalsи compareToя имею в виду следующее:

Говорят, что естественный порядок для класса C совместим с equals тогда и только тогда, когда e1.compareTo( e2) == 0 имеет то же логическое значение, что и e1.equals(e2) для каждого e1 и e2 класса C.

19
задан Michael McGowan 8 March 2012 в 20:08
поделиться