[Java SE 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();
}
YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto
Copyright© 矢木 浩人 All Rights Reserved.