Некоторое время назад я столкнулся с ситуацией, чтобы добавить метод в один интерфейс, который уже использовался классами 15+. Во время реализации старые классы не нужны для этого нового метода, но этот новый метод требуется для других новых классов. Здесь нужно учитывать, что этот новый метод является необязательным для старых классов и является обязательным для вновь развивающихся классов. Каковы способы решения этой проблемы?
Я решил так: я создал новый интерфейс и объявил метод в этом интерфейсе и реализовал его со старым интерфейсом в новых классах и сделаю то же самое для других старых классов, если им нужен этот новый метод.
Java8, у нас есть "по умолчанию для обработки подобных ситуаций", но каковы другие способы решения этого типа ситуации в более старых версиях Java?
Старые версии Java не имели возможности решить эту проблему. Вот почему методы по умолчанию были введены в Java 8.
Обратите внимание, что JVM с радостью загрузит класс, реализующий интерфейс, даже если он фактически не реализует все его методы (то есть, если он был скомпилирован до добавления новых методов): во время выполнения вы будете иметь только исключение при вызове одного из эти нереализованные методы.
Вот почему старые драйверы JDBC по-прежнему работают в новых JRE, хотя они не реализуют все новые методы JDBC... если, конечно, вы не называете один из этих новых методов.