[Java] Вложенные вдруг друга интерфейсы?

irina-sokolov

недавно увидел, как интерфейс определяется в интерфейсе.
Кто-нибудь может это
1 прокомментировать
2 объяснить, чем это хорошо
Так сказать, не понимаю смысла, плюсов и минусов.

Dasar

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

irina-sokolov

а как он может использоваться не напрямую?

Dasar

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


interface ICar
{
string Color {get;}
ICarDriver Driver {get;}
interface ICarDriver
{
string Name {get;}
int Id {get;}
}
}


предполагается, что обычно нам не нужно создавать переменную типа ICarDriver, и что в основном будут использоваться следующие обращения:


ICar car = GetMyCar;
WriteLine (car.Driver.Name);

irina-sokolov

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

Dasar

не понял вопроса.
> не через класс
что значит не через класс?

irina-sokolov

это как ты написал. Просто определить интерфейс и пользоваться переменными.
а через класс это
Class C implements I
{
}
Interface I
{
string foo;
}

Dasar

> это как ты написал. Просто определить интерфейс и пользоваться переменными.
В приведенном мною примере, считается, что кто-то где-то написал класс, который реализует интерфейс ICar.
и функция GetMyCar как раз возвращает экземпляр данного класса.
ps
При так называемой plugin-ной системе - класс, реализующий ICar может быть написан много позже, чем основная программа, и другими людьми. а функция GetMyCar тогда будет уметь динамически подгружать такие классы.

irina-sokolov

а ICarDriver имплементируется где-нибудь?

Dasar

Да, тоже имплементируется.
Оставить комментарий
Имя или ник:
Комментарий: