Объявление интерфейса в интерфейсе

314
08 февраля 2017, 23:46

Тело интерфейса может объявлять члены интерфейса, т.е. поля, методы, классы и интерфейсы.

Смысл работы интерфейса мне вроде бы понятен, но хотелось бы дополнить свое понимание ответом на следующий вопрос. Для чего может понадобиться объявлять интерфейс в интерфейсе?

Answer 1

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

Но, если все-таки предположить, что такое возможно и придумать ситуацию, у меня вышло так:

   public interface ProjectMaker {
        interface MakeHelper {
            void makeThisPart(Project project);
            void makeAllParts(Project project);
        }
        void makeProject(MakeHelper maker);
    }
    public class SomeClass {
        ProjectMaker mProjectMaker = ...;
        public void makeSomeClass {
            mProjectMaker.makeProject(new ProjectMaker.MakeHelper() {
                @Override
                public void makeThisPart(Project project) {
                    ...
                }
                @Override
                public void makeAllParts(Project project) {
                    ...
                }
            });
        }
    }

P.S. Не стоит "на ходу" создавать реализации интерфейсов, как в методе makeSomeClass(). Лучше сначала создать объект, который реализует интерфейс и передать уже его.

READ ALSO
Целевой тип лямбда-выражения

Целевой тип лямбда-выражения

Что называется целевым типом лямбда-выражения?

1147
Запуск программы после checkout в SVN

Запуск программы после checkout в SVN

Как запустить проект (программу) в Eclipse? Есть проект джава, я его через SVN сохранил на компьютер для последующего дебагаНо у меня не выходит...

345
Не работает отладка при сборке проекта JavaFX при помощи Gradle

Не работает отладка при сборке проекта JavaFX при помощи Gradle

Использую готовый скрипт для сборки, всё запускается и вроде бы всё хорошоНо почему не работает отладка ? я предполагаю нужно добавить еще...

342
Как получить строку по индексу?

Как получить строку по индексу?

Имеется строковый массив:

357