Можем ли мы определить интерфейс внутри интерфейса? - PullRequest
15 голосов
/ 25 февраля 2010

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

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

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

Ответы [ 6 ]

43 голосов
/ 25 февраля 2010

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

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

Подробнее см. .

Далее ...

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

public interface Processor {
   void execute(NotificationListener listener);

    interface NotificationListener {
        void processingCompleted();
    }  
}

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

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

7 голосов
/ 02 июля 2013

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

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

interface Entry <K,V> {
  ..
}

но Javadoc говорит

public static interface Map.Entry<K,V>

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

-дбеднар 2013-07-02

6 голосов
/ 25 февраля 2010

Да.

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

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

1 голос
/ 19 февраля 2013

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

пример кода:

Public interface Service1{

  public interface ServiceInter1{

   public Interface In{
    Declare your own constants
   }

   public Interface Out{
      Declare your own constants
   }

 }

}
0 голосов
/ 27 июня 2019

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

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

0 голосов
/ 31 марта 2015

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

Внутри интерфейса карты определите Entry, как показано ниже. карта открытого интерфейса {

/**
 * Map.Entry is a key/value mapping which is contained in a Map.
 */
public static interface Entry<K, V> {
    .....some loigic
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...