1. 람다 식의 본질
Lambda 표현식과 익명 내부 클래스는 실제로 인터페이스의 인스턴스를 생성하는 데 사용됩니다.
클래스를 통해 인터페이스를 구현 한 다음 클래스별로 객체를 인스턴스화하는 것과 비교할 때 Lambda 식과 익명 내부 클래스 구문은 더 간결하며 클래스를 정의하지 않고도 인터페이스의 인스턴스를 생성 할 수 있습니다.
2. 문법
예를 들어 암호화 인터페이스는 다음과 같습니다.
/**
* 加密接口
*/
public interface IEncoder {
/**
* 对数字加密
*/
public int encode(int num);
}
2.1 클래스를 통한 암호화
특정 암호화 알고리즘을 구현하기위한 가장 일반적인 방법은 인터페이스를 구현하기위한 클래스를 정의하는 것입니다. 다음 코드는 순전히 정상적인 작업이며 설명 할 필요가 없습니다.
/**
* 加法加密
*/
public class AddEncoder implements IEncoder {
@Override
public int encode(int num) {
return num + 1;
}
/**
* 测试
*/
public static void main(String[] args) {
IEncoder encoder = new AddEncoder();
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
2.2 익명 내부 클래스를 통한 암호화
익명 내부 클래스를 사용하는 경우 클래스를 특별히 정의 할 필요가 없으며 필요할 때 익명 내부 클래스를 정의하기 만하면됩니다.
public class AnonymousDemo {
public static void main(String[] args) {
// 使用时临时定义类
IEncoder encoder = new IEncoder() {
@Override
public int encode(int num) {
return num + 1;
}
};
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
위의 두 예에서 인코더 객체의 경우 기능은 실제로 동일하며 두 가지 모두 추가 암호화 방법을 사용하는 인스턴스입니다. 그러나이 객체를 생성하는 특정 방법 측면에서 익명 내부 클래스를 일시적으로 사용하여 암호화 방법을 사용자 지정할 수 있습니다. 이는 클래스를 특별히 정의하는 것보다 더 가볍습니다.
2.3 Lambda 표현식을 통한 암호화
Lambda 표현식은 더 간단하지만 기본적으로 여전히 인터페이스 인스턴스를 생성합니다.
public class LambdaDemo {
public static void main(String[] args) {
// 通过表达式定义接口的实力
IEncoder encoder = (num) -> {
return num + 1;
};
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
보시다시피 실제로 Lambda 표현식은 여전히 메서드의 구체적인 실현을 보여줍니다.
(num)
매개 변수를 나타냅니다.->
이것이 Lambda 표현식임을 나타냅니다.{return num+1;}
코드 블록, 특정 메소드 로직 작성.
2.4 Lambda 표현식의 속기
매개 변수 목록에 매개 변수가 하나만있는 경우 매개 변수의 괄호를 생략 할 수 있습니다.
코드 블록에 문이 하나만있는 경우 코드 블록을 직접 생략 할 수 있습니다 {}
.
코드 블록이 하나 뿐인 return
경우 생략 할 수도 있습니다.
따라서 위의 식은 다음과 같이 단순화 할 수 있습니다.
public class LambdaDemo {
public static void main(String[] args) {
// 通过表达式定义接口的实力
IEncoder encoder = num -> num + 1;
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
3. Lambda 표현의 의미
익명 내부 클래스와 Lambda 표현식은 실제로 인터페이스 인스턴스화 코드를 단순화하기위한 것입니다.
인터페이스의 인스턴스가 한 번만 사용되는 경우 클래스를 단독으로 작성하는 것이 약간 낭비이므로 표현식으로 직접 수행하는 것이 좋습니다.
Lambda는 익명 내부 클래스보다 간단하지만 Lambda 표현식은 하나의 메서드로만 인터페이스에 직면 할 수 있지만 익명 함수는 여러 메서드가있는 인터페이스를 지원할 수 있습니다.
4. 기능적 인터페이스
Lambda 표현식은 함수 인터페이스라고 할 수있는 하나의 메서드 인터페이스 만 지원할 수 있습니다.
Java8은 기능 인터페이스 @FunctionalInterface
에 대한 주석을 제공 하여 인터페이스가 작동하는지 확인합니다. 이는 기능 인터페이스의 중요성을 보여줍니다!
구문은 다음과 같습니다.
/**
* 加密接口
*/
@FunctionalInterface
public interface IEncoder {
/**
* 对数字加密
*/
public int encode(int num);
}