Java 8은 Lambda 표현식을 도입하고 익명 내부 클래스를 지원하여 로컬 변수에 액세스합니다. Java 9에서는 람다 표현식이 지역 변수를 캡처할 수 있도록 허용하고, Java 10에서는 컴파일러가 람다 표현식 매개변수와 반환 유형을 추론할 수 있는 지역 변수 유형 추론을 구현합니다. 실제 사례에서는 다양한 Java 버전의 지역 변수 액세스 및 유형 추론에 대한 람다 표현식의 영향을 보여줍니다.
Java 버전이 Lambda 표현식에 미치는 영향
소개
Lambda 표현식은 함수를 객체의 인스턴스로 선언할 수 있도록 Java 8에 도입된 핵심 기능입니다. Java 8 이전에는 익명의 내부 클래스만 사용하여 함수를 구현할 수 있었습니다.
Java 8
Java 8에서 Lambda 표현식은 함수 본문에서 입력 매개변수를 구분하는 화살표 기호(->)로 표시됩니다. 예:
(x) -> x + 1
이 Lambda 표현식은 int 입력 매개변수를 사용하고 x + 1을 반환합니다.
Java 9
Java 9에서는 Lambda 표현식에 대한 로컬 변수 캡처 지원이 도입되었습니다. 이는 이제 람다 식이 최종 유형이 아니더라도 해당 범위의 지역 변수에 액세스할 수 있음을 의미합니다. 예:
int y = 5; (x) -> x + y
이 람다 식은 최종 유형이 아니더라도 지역 변수 y에 액세스할 수 있습니다.
Java 10
Java 10에는 람다 표현식에 대한 지역 변수 유형 추론 지원이 도입되었습니다. 즉, 컴파일러는 우리가 명시적으로 선언하지 않고도 람다 식 매개 변수의 유형과 반환 유형을 추론할 수 있습니다. 예:
(x, y) -> x + y
이 Lambda 표현식은 명시적으로 선언하지 않았더라도 입력 매개 변수가 int 유형이고 반환 유형이 int 유형이라고 추론할 수 있습니다.
실용 사례
다음은 다양한 Java 버전이 람다 표현식에 미치는 영향을 보여주는 실제 사례입니다.
// 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에 액세스할 수 없습니다. . 이 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에서는 로컬 변수 캡처 지원이 구현되었으므로 이제 익명 내부 클래스와 Lambda 표현식 모두 범위 내 로컬 변수 y에 액세스할 수 있습니다.
// Java 10 public static void main(String[] args) { int y = 5; // Lambda 表达式,自动推断类型 Runnable lambda = (x) -> { System.out.println(x + y); }; }
Java 10에서 Lambda 표현식은 입력 매개변수 유형과 반환 유형을 자동으로 추론할 수 있습니다. 따라서 람다 식에서 입력 매개 변수의 유형과 반환 유형을 명시적으로 선언할 필요가 없습니다.
위 내용은 다양한 Java 버전이 함수에 미치는 영향의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!