внутренний класс в Интерфейсе

Действительно ли возможно создать внутренний класс в интерфейсе? Если бы возможно, почему мы хотели бы создать внутренний класс как этот, так как мы не собираемся создавать какие-либо интерфейсные объекты?

Эти внутренние классы помогают в каком-либо Процессе разработки?

89
задан Charlie Wallace 22 February 2019 в 20:29
поделиться

1 ответ

Да, вы можете создать как вложенный класс, так и внутренний класс внутри интерфейса Java (обратите внимание, что вопреки распространенному мнению не существует такой вещи, как « статический внутренний класс » : это просто не имеет смысла, нет ничего «внутреннего» или «внешнего» класса, когда вложенный класс является статическим, поэтому он не может быть «статическим внутренним»).

В любом случае, следующий код компилируется нормально:

public interface A {
    class B {
    }
}

Я видел, как он использовал какую-то «проверку контракта» непосредственно в определении интерфейса (ну, в классе, вложенном в интерфейс, который может иметь статические методы, в отличие от самого интерфейса, который не может). Выглядит вот так, если я правильно помню.

public interface A {
    static class B {
        public static boolean verifyState( A a ) {
            return (true if object implementing class A looks to be in a valid state)
        }
    }
}

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

Сейчас я не буду комментировать полезность такой конструкции, и, судя по тому, что я видел: я видел ее, но это не очень распространенная конструкция.

Кодовая база 200KLOC здесь, где это происходит точно в нулевое время (но затем у нас есть много других вещей, которые мы считаем плохими практиками, которые также происходят точно в нулевое время, что другие люди сочли бы совершенно нормальным, так что ...).

44
ответ дан 24 November 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: