自分のインタフェース内のクラスを初期化します

qt0:

私はいくつかのコードを見て、このような構成に気づきました:

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. 現実の世界でこれを使用することをお勧めですか?
アンドリューTobilko:

これは2つの例です定数宣言 interintrインターフェースです。それは、パターンではないと私はそれが良い習慣だと言うではないでしょう。

  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フィールド。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=314125&siteId=1