Проверьте, равны ли два объекта интерфейса (без переопределения)

#java #object #if-statement #interface #equals

#java #объект #if-оператор #интерфейс #равно

Вопрос:

У меня есть интерфейс :

 interface Query
{
    Set<SelectExpression> getSelectRows();

    String getWhereClause();
}
  

У меня есть класс, в котором я хочу проверить, дают ли две разные реализации этого интерфейса одинаковые результаты.

Когда я делаю :

Случай 1: if (query1.equals(query2)) я получаю некоторый хэш-код, и они не совпадают.

Случай 2: if (query1.getSelectRows().equals(query2.getSelectRows())) они одинаковы.

Случай 3: if (query1.getWhereClause().equals(query2.getWhereClause())) они одинаковы.

Есть ли способ проверить, совпадают ли query1 и query2 без изменения интерфейса?У меня нет права изменять код интерфейса. [Я читал о переопределении встроенных методов]

Комментарии:

1. Почему именно не query1.equals(query2) работает?

2. запрос 1 равен ‘xyz $ 1 @ 2526’, а запрос 2 равен ‘abc @ 2531’

3. Это не имеет никакого отношения к equals методу. Это похоже на результат toString реализации по умолчанию. Реализации Query должны выполняться equals правильно.

4. Если вы сравниваете объект класса A с объектом класса B, они не равны, за исключением очень эксцентричной реализации equals() .

5. Классы A и B не имеют никаких объектов. Реализация немного сложна. Они реализуют только методы в интерфейсе. Я хочу подтвердить, что значения, возвращаемые из этих классов, одинаковы.