Вероятно, это неправильное использование методов по умолчанию. Известно, что методы по умолчанию способствуют обратной совместимости, когда интерфейсы / контракты развиваются с новыми методами, но проблема в вашем случае заключается в том, что не все реализации IEntityParam
заботятся о новой версии "контракта". Методы по умолчанию являются концептуально частью контракта интерфейса.
Обычный способ удовлетворить ваши текущие потребности - это расширить интерфейс:
public interface IEntityParam {
public void validateParam(Object object);
}
public interface IEntityParamExtended extends IEntityParam {
public default void validateParam(Object object,List<String> Str);
}
Таким образом, ваш класс, которому нужен второй метод, будет реализовывать IEntityParamExtended
и обеспечивать реализацию для обоих методов; в то время как все другие реализации IEntityParam
остаются неизменными.
В будущем, когда IEntityParamExtended
необходимо повысить до IEntityParam
(т. Е. Когда новый метод станет частью контракта IEntityParam
), вы можете использовать метод default
, чтобы избежать форсирования всех существующих реализаций подлежит изменению и перекомпиляции.