BrotherFlame (brotherflame) wrote,
BrotherFlame
brotherflame

Category:

Ответы на вопросы к собесам, ч. 2


12. Статические методы интерфейсов, и методы по умолчанию.
Вопрос редкий, сильно подробно не буду. Это то, вопрос из категории что нового появилось в java8 по сравнению с java7.

Контекст для понимания проблемы.

Допустим, у нас есть интерфейс
public interface Interface {
void method();
}
И стопиццот классов, имплементирующих этот интерфейс.
Потом, по тем или иным причинам, нужно изменить этот интерфейс, и добавить в него метод. Ну, например, работаем с какой-ьо внешней библиотекой и поставщик нашел в ней баги, передалал, выкатил новую версию, которой нужны обьекты типа InterfaceNew, вместо Interface. И вот засада, InterfaceNew выглядит так:
public interface InterfaceNew {
void method();
void betterMethod();
}
У нас 100 классов, имплементирующих Interface, и теперь в каждый из них придется дописать реализацию метода betterMethod(), хотя он реально может быть нужен в одном-двух или не нужен вообще, кроме как для совместимости с новой библиотекой.
Но, нет, не придется, потому что мы напишем:
public interface InterfaceNew {
void method();
default void betterMethod() {
System.out.println("Нас и старый устраивает);
}
default -- позволяет написать реализацию прям в интерфейсе, такой метод переопределять в дочерних классах необязательно. Кроме случая, когда класс имплементирует 2 или больше интерфейсов, имеющих одинаковый дефолтный метод. В этом случае метод необходимо переопределить в классе. (@Override)
Ну и заодно про функциональные интерфейсы (@FunctionalInterface)
Это интерфейс с одним абстрактным методом.
@FunctionalInterface
interface I (ReturnType, ArgType) { // тут треугольные скобки выше
ReturnType calc(ArgType x);
}
При чем здесь дефолтные методы? При том, что они абстрактными не являются и их можно напихать в функциональный интерфейс сколько угодно.

Статические методы интерфейса.
Они так же должны содержать реализацию, но их нельзя переопределить в дочерних классах.
Еще они не могут переопределять методы класса Object

На одном из собесов (Спортмастер) года три назад спросили про лямды, предикаты, функции, поставщики, потребители, компараторы. Это тоже все из категории вопросов "что нового в яве8". Но это ответ на 5 длинных постов.

Про мапу, т.е. ассоциативный массив следующий.

Tags: work
Subscribe

  • Жирожиг

    Взвесился. 103.3кг, 50,3кг мышц, 16.2% жир. -1.5%жира, +2.3кг мышц за месяц, при том, что на майских халявил, обжирался и бухал. Следующий поинт:…

  • Фитнес-мотивашка

    29 июня все команды стрима едут в офис на мегапланирование следующего квартала чтобы встретиться очно. За время майских , забухал, зарос, одичал,…

  • Новая программа

    С тренером составили новую прогу, еще ни разу так не делал. Неделю качаем многоповторкой: грудь+руки, спина+плечи, ноги. И неделя жим, присед,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 3 comments