Javaのlamda表現は解析を実現します。
Java 8はlambada表現を導入した。lamda表式は新機能ではなく、コードを便利にするために作られた文法飴です。
しかし、他の言語ではすでに一般的なlamban表現であっても、Javaでそれをサポートするには、下の互換性を考慮する必要があります。
簡単に言えば、Javaのlamban表現サポートは、約2つの側面を考慮する必要があります。は、既存の方法の匿名クラス の代わりに、lamban構文をサポートする必要がある。は、既存のJDKにおいて、どのように新しい動作を追加するかを考慮する必要があります。
一つ目の答えはFutional InterfaceのAnnotationで、二つ目の答えはdefault方法です。
Funtional Inteface
一つのインターフェースに@Funtional Interfaceを追加することによって、このインターフェースは特殊なインターフェースであることを表します。その特殊性はこのinterfaceは、サブクラスが を実現するのを待つ抽象的な方法しかない。の後、このinterfaceに対応するオブジェクトは、lambada式 であることができる。 lamda表現は、このinterfaceの唯一の抽象的な方法署名と一致しなければならない 。
default方法はinterfaceでしか宣言できません。default方法は、interfaceがすでに実現された方法を定義することもできるようにする。それでは問題が来ました。インタフェースはなぜこの特性が必要ですか?javaのインタフェースは全部抽象的な方法だけあるべきではないですか?
この例を考えてみます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
しかし、他の言語ではすでに一般的なlamban表現であっても、Javaでそれをサポートするには、下の互換性を考慮する必要があります。
簡単に言えば、Javaのlamban表現サポートは、約2つの側面を考慮する必要があります。
Funtional Inteface
一つのインターフェースに@Funtional Interfaceを追加することによって、このインターフェースは特殊なインターフェースであることを表します。その特殊性は
@FunctionalInterface
public interface ITest {
void sayHello(String name);
}
public class Testlambda {
public static String name = "test";
public static void testRun2(ITest test){
test.sayHello(name);
}
public static void main(String[] args) {
testRun2(test->System.out.println(test));
}
}
Default方法default方法はinterfaceでしか宣言できません。default方法は、interfaceがすでに実現された方法を定義することもできるようにする。それでは問題が来ました。インタフェースはなぜこの特性が必要ですか?javaのインタフェースは全部抽象的な方法だけあるべきではないですか?
この例を考えてみます。
List<Integer> alist = new ArrayList<Integer>();
alist.add(1);
alist.add(2);
alist.add(3);
alist.add(4);
alist.forEach((s)->System.out.println(s));
ListはJDK java.utilのインターフェースです。このインターフェースは昔からあります。forEach方法を導入するには、lamban表現を使用することをサポートするためには、Listを変更する必要があります。しかし、JDKは下に互換性があり、既知のListにインターフェースを追加すると、互換性が確保できなくなります。だから、このために、何とかしてdefault方法を追加しました。これにより、一つのインターフェースは、JDK元のインターフェースを維持するためにデフォルトの方法を定義することができます。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。