Инициализируйте классы в их собственном интерфейсе - PullRequest
2 голосов
/ 06 октября 2019

Я посмотрел какой-то код и заметил такую ​​конструкцию:

public interface TestIntrerface {
  void doFirst();
  void doSecond();
}

public interface Interface1 extends TestIntrerface {
  Interface1 inter = new FirstClass();
}

public interface Interface2 extends TestIntrerface {
  Interface2 intr = new SecondClass();
}


public class FirstClass implements Interface1 {
  public void doFirst() {
    //...
  }

   public void doSecond() {
      //...
   }
}

public class SecondClass implements Interface2 {
   public void doFirst() {
      //...
   }

  public void doSecond() {
      //...
  }
}


public class Test {
  public static void main(String[] args) {
    Interface1.inter.doFirst();
    Interface2.intr.doSecond();
  }
}

У меня есть потенциал, но я никогда раньше не видел эту конструкцию. Два вопроса:

  1. Как называется этот шаблон (этот шаблон (?))?
  2. Полезно ли использовать его в реальном мире?

1 Ответ

2 голосов
/ 06 октября 2019

Это пример двух объявлений констант inter и intr в интерфейсах. Это не шаблон, и я бы не сказал, что это хорошая практика.

  1. Interface1 и Interface2 не имеют смысла: они не дополняют / не реализуют расширяемые ими интерфейсы. По сути, они являются держателями констант, которые могли быть определены где-то еще. Обратите внимание, что константы привязаны к определенным классам, в то время как интерфейсы несут более широкий смысл, обеспечивают общий интерфейс.

  2. Имена inter и intr ужасны и не говорятчто эти константы представляют / делают.

Более оправданный пример будет выглядеть как

interface TestInterface {
  void doFirst();
  void doSecond();

  TestInterface EMPTY = new TestInterface() {
    @Override
    public void doFirst() {}
    @Override
    public void doSecond() {}
  };

}

, где EMPTY говорит о том, что это реализация по умолчанию (и пустая)интерфейс. Обратите внимание, что я назвал это EMPTY (не empty), потому что это всегда поле public static final.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...