Java Syntactic Sugar--Lambda 표현식의 의미

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);
}

추천

출처blog.csdn.net/woshisangsang/article/details/107591447