Интерфейс Java для принудительного переопределения .equals () - PullRequest
0 голосов
/ 16 мая 2018

У меня есть интерфейс для фабрики.Предположим, что интерфейс для Module существует (мне нужно различать подтипы модуля).Любые две фабрики, определенные одним и тем же листовым классом дерева наследования, всегда идентичны.

public interface ModuleFactory<T extends Module> {
    T createModule(long seed);
}

Эти фабрики входят в Set, поэтому их идентичность определяется .equals().Следовательно, мне нужен способ обеспечить, чтобы реализующие классы переопределяли этот метод.В противном случае набор будет заполнен дубликатами.

Проблема в том, что Object уже реализует этот метод, поэтому у любого конкретного класса уже будет реализация метода.Я не могу просто вставить boolean equals(Object obj); в мой интерфейс, так как любой конкретный класс уже удовлетворит интерфейс с реализацией по умолчанию.Как я могу принудительно переопределить?

1 Ответ

0 голосов
/ 16 мая 2018

Вы не можете форсировать равные. Но вы можете создать абстрактный класс, предоставить реализацию для equals(), которая по сути вызывает метод customEquals (), который является абстрактным. Итак, все ваши классы вынуждены реализовать customEquals(); где вы можете предоставить пользовательскую реализацию для equals.

...