Метод по умолчанию с реализацией UnsupportedOperationException

Мне нужно исправить ошибку в моем проекте, но выясняется, что основная причина - это влияние многих обходных путей, распространяемых для всех реализаций интерфейса из-за проблемы проектирования. Я хочу реорганизовать этот интерфейс, но я не могу сделать это сейчас, потому что у меня нет времени, чтобы изменить все реализации. Поэтому моя идея заключается в том, чтобы добавить метод по умолчанию в этот интерфейс и реализовать его только в одной реализации (частично решить проблему проектирования), а затем выполнить большой рефакторинг в следующем спринте. Этот рефакторинг предназначен для замены всех методов в этом интерфейсе на более простые и значимые. Одним из этих новых методов является метод по умолчанию, о котором идет речь.

Но на самом деле для этого метода не требуется реализация, это просто временное решение, которое идет в правильном направлении.

Имеет ли смысл реализовывать этот метод по умолчанию (конечно, в интерфейсе), генерируя исключение UnsupportedOperationException?

1 ответ

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

Но в комментариях вы отметили:

Я переопределю это в классе реализации, который мне нужен, чтобы исправить ошибку и затем вызвать этот новый метод вместо предыдущего, который не имеет смысла.

Если вы собираетесь вызывать новый метод для любого экземпляра вашего интерфейса, то вы должны быть уверены, что он сделает что-то подходящее. Если есть вероятность, что такой вызов обслуживается вашей предложенной реализацией по умолчанию, которая всегда выбрасывает UnsupportedOperationException (и предположим, что это было бы нежелательно), тогда это, вероятно, не оправдывает такую ​​уверенность.

Если у вас есть какая-то обоснованная уверенность в том, что новый метод будет вызываться только для экземпляров одного конкретного класса реализации, то либо в использовании вами интерфейсов есть что-то очень странное, либо вам вообще не нужно менять интерфейс, То есть, если вы знаете, с какой реализацией вы работаете, вы можете добавить новый метод только в этот класс, не меняя интерфейс.

Другие вопросы по тегам