トップ 一覧 ping 検索 ヘルプ RSS ログイン

Java SE 8 関数インターフェースの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Java SE 8 関数インターフェース
[Java SE 8]

*http://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.8

*関数インターフェースは、ただ一つの抽象メソッド(オブジェクトから継承するメソッドはさておいて)を持ったインターフェース
*一つの関数契約を表現する
*この「一つ」のメソッドは、複数の抽象メソッドを、スーパーインターフェースから継承されたオーバーライド同等のシグネチャをともなって形成する。
*この例では、継承されたメソッドは論理的に一つのメソッドを表現する。

!!例
!簡単な関数インターフェースの例
 interface Runnable {
   void run();
 }
::以下は、関数インターフェースではない。Objectのメンバーであってはいけない。
 interface NonFunc {
   boolean equals(Object obj);
 }
::しかしながら、上記を継承したサブインターフェースは関数インターフェースとなる。 宣言された抽象メソッドは、Objectのメンバーではない。
 interface Func extends NotFunc {
   int compare(String o1, String o2);
 }
::同様に、java.util.Comparator<T> は一つの抽象メソッドをもち、かつObjectのメソッドではないため、関数インターフェースとなる。
 interface Comparator<T> {
   boolean equals(Object obj);
   int compare(T o1, T o2);
 }
::次のインターフェースは関数インターフェースではない。一つの抽象メソッドをもち、それはObjectのメンバーではないが、Objectのメンバーではない、2つのpublicな抽象メソッドをもつ。
 interface Foo {
   int m();
   Object clone();
 }