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

  • Вакансии

    Продолжают какие-то вакансии по инерции долетать, готовиться к собесам не собираюсь, но планку еще на 20р поднял. До уровня зп архитектора. Если так…

  • Пустота

    Хозяйка прислала счет за комуналку и написала, что заедет завтра вечером, и я удивился, ведь она вроде пару дней назад присылала. Нет, она права, это…

  • Где мой оффер, чувак?

    Походу меня переместили, но забыли сказать об этом :) Предыстория всего этого экшена грустная, но поучительная. Конец 2019 -- начало 2020. Разгар…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 3 comments