Можем ли мы определить интерфейс в интерфейсе?

Мне нравится знать, можно ли определить интерфейс в интерфейсе.  как

interface abc {
    void show();
    public interface xyz {
        void read();
    }
}

Это был вопрос, заданный в интервью. Любое использование в реальном времени этого.

Ответ 1

Да, мы можем сделать это. Определение вложенного интерфейса в Java следующее:

Вложенный интерфейс - это любой интерфейс, объявление которого происходит в теле другого класса или интерфейса. Интерфейс верхнего уровня - это интерфейс, который не является вложенным.

Обратитесь к этому для более.

В дальнейшем...

Одной из причин может быть то, что внешний интерфейс имеет метод, который принимает реализацию обратного вызова в качестве аргумента. В этом случае вложенный интерфейс - это контракт, который должен реализовать метод обратного вызова. Я не вижу смысла объявлять этот интерфейс обратного вызова на верхнем уровне.

public interface Processor {
   void execute(NotificationListener listener);

    interface NotificationListener {
        void processingCompleted();
    }  
}

Еще одно хорошее чтение на сайте Sun по этой теме здесь

В частности, обратите внимание, что при реализации интерфейса вам не требуется реализовывать какие-либо интерфейсы, вложенные в него.

Ответ 2

Конечно. Посмотрите на SOURCE CODE для интерфейса java.util.Map. Интерфейс карты содержит вложенный интерфейс ввода.

Интересно, что в исходном коде просто сказано

interface Entry <K,V> {
  ..
}

но javadoc говорит

public static interface Map.Entry<K,V>

Я предполагаю, что это связано с тем, что вложенные интерфейсы неявно "public static", хотя исходный код этого не говорит. (Но методы внутри интерфейса - это публичность публичности и не могут быть статическими, т.е. В интерфейсах разрешены только методы экземпляра).

-dbednar 2013-07-02

Ответ 3

Да.

Вы могли бы протестировать это для себя и получить окончательный, безответный, безрисковый ответ через 30 секунд.

Ожидание возможно навсегда для возможного неправильного ответа на форуме - это не рациональный способ запроса.

Ответ 4

Мы используем его в нашем приложении, Интерфейс внутри интерфейса, используя это в основном для функциональных констант, так что случайно никакие другие не создадут новые константы в другом месте проекта, связанные с этим Service1.

Пример Код:

Public interface Service1{

  public interface ServiceInter1{

   public Interface In{
    Declare your own constants
   }

   public Interface Out{
      Declare your own constants
   }

 }

}

Ответ 5

да, мы можем определить.

Интерфейс внутренней карты определяет ввод, как показано ниже. открытый интерфейс Карта {

/**
 * Map.Entry is a key/value mapping which is contained in a Map.
 */
public static interface Entry<K, V> {
    .....some loigic
 }
}

Ответ 6

Реальное использование этого - упростить сложную систему, предоставляя интерфейс Facade. - Проверьте шаблон проектирования фасада.

https://en.wikipedia.org/wiki/Facade_pattern