Java 8 では Lambda 式が導入され、ローカル変数にアクセスするための匿名内部クラスがサポートされています。 Java 9 ではラムダ式でローカル変数をキャプチャできるようになり、Java 10 ではローカル変数の型推論が実装され、コンパイラはラムダ式のパラメータと戻り値の型を推論できます。実際のケースでは、さまざまな Java バージョンでのローカル変数アクセスと型推論に対するラムダ式の影響を示します。
#Lambda 式に対する Java バージョンの影響
はじめに
Lambda 式フォーマットは Java 8 で導入された重要な機能で、関数をオブジェクトのインスタンスとして宣言できるようになります。 Java 8 より前では、関数を実装するには匿名内部クラスしか使用できませんでした。Java 8
Java 8 では、ラムダ式は矢印記号 (->) で表され、入力パラメーターと関数本体が区切られます。例:(x) -> x + 1この Lambda 式は int 入力パラメータを受け取り、x 1 を返します。
Java 9
Java 9 では、ラムダ式のローカル変数キャプチャのサポートが導入されています。これは、ラムダ式が、最終型でなくても、スコープ内のローカル変数にアクセスできるようになったということを意味します。例:int y = 5; (x) -> x + yこの Lambda 式は、final 型ではない場合でも、ローカル変数 y にアクセスできます。
Java 10
Java 10 では、ラムダ式のローカル変数型推論のサポートが導入されています。これは、明示的に宣言しなくても、コンパイラがラムダ式パラメータの型と戻り値の型を推測できることを意味します。例:(x, y) -> x + yこの Lambda 式は、明示的に宣言していなくても、入力パラメータの型が int であり、戻り値の型が int であると推論できます。
実際的なケース
次は、さまざまな Java バージョンが Lambda 式に与える影響を示す実際的なケースです:// Java 8 public static void main(String[] args) { int y = 5; // 匿名内部类 Runnable runnable = new Runnable() { @Override public void run() { System.out.println(y); // 无法访问 } }; // Lambda 表达式 Runnable lambda = () -> System.out.println(y); // 无法访问 }Java 8 では、匿名の内部構造ローカル変数 y は最終型ではないため、クラスはスコープ内のローカル変数 y にアクセスできません。このバージョンの Java ではローカル変数キャプチャがサポートされていないため、ラムダ式も y にアクセスできません。
// Java 9 public static void main(String[] args) { int y = 5; // 匿名内部类 Runnable runnable = new Runnable() { @Override public void run() { System.out.println(y); // 可以访问 } }; // Lambda 表达式 Runnable lambda = () -> System.out.println(y); // 可以访问 }Java 9 では、ローカル変数キャプチャのサポートが実装されたため、匿名内部クラスとラムダ式の両方がスコープ内のローカル変数 y にアクセスできるようになりました。
// Java 10 public static void main(String[] args) { int y = 5; // Lambda 表达式,自动推断类型 Runnable lambda = (x) -> { System.out.println(x + y); }; }Java 10 では、ラムダ式は入力パラメータの型と戻り値の型を自動的に推論できます。したがって、ラムダ式で入力パラメータの型と戻り値の型を明示的に宣言する必要はありません。
以上がさまざまな Java バージョンが関数に与える影響の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。