0

私はJava8を初めて使用し、インターネットでこのトピックに関するいくつかのことを読みました。現時点では、機能的なインターフェースとは何かを理解しようとしています。いくつかの例を見つけましたが、 Skipインターフェイスには 2 つのメソッドが定義されているため、機能的なインターフェイスである理由がわかりません。誰かが私に少し説明してくれることを願っています。コードは次のとおりです。

 @FunctionalInterface
 public interface Sprint 
 {
     public void sprint(Animal animal);
 }


 @FunctionalInterface
 public interface Skip extends Sprint 
 {

      public default int getHopCount() 
      {
         return 10;
      }

      public static void skip(int speed) {}
 }
4

2 に答える 2

5

Skipインターフェイスには抽象メソッドが1つしかありません(defaultメソッドはstaticカウントされません)-インターフェイスsprintから継承されたメソッドです。Sprintしたがって、これは機能的なインターフェースです。

于 2016-06-12T12:53:04.570 に答える
2

それについて考える最善の方法は、このインターフェースのインスタンスを単一のラムダとして表現することは理にかなっているでしょうか? abstractこれは、インターフェイスにメソッドが1 つだけある場合に当てはまります。

Sprintは であるメソッドsprint()を持っていabstractます。このインターフェイスのラムダは次のようになります。

Sprint sprint = animal -> {
    animal.doThingOne();
    animal.doThingTwo();
}

Skipstaticメソッドとメソッドがありdefaultます。staticメソッドはインスタンスとは関係ありません。staticこれはJavaでの意味です。さらに、defaultデフォルトの実装がすでに提供されているため、メソッドをサブクラスに実装する必要はありません。これは、ラムダがSkip(sprint()から継承されたSprint) に抽象メソッドを実装するだけで有効になることを意味します。例:

Skip skip = Animal::doThingThree; // Equivalent to: animal -> animal.doThingThree()

staticメソッドとdefaultメソッドはラムダで実装する必要がないため、必要な数だけ持つことができ、機能的なインターフェイスを維持できます。

于 2016-06-12T13:01:05.400 に答える