생성자의 메소드 참조
종류 | 람다 | 메서드 참조 |
static메소드 참조 | (x) -> ClassName.method(x) | ClassName::method |
인스턴스메소드 참조 | (obj, x) -> obj.method(x) | ClassName::method |
특정 객체의 인스턴스메소드 참조 | (x) -> obj.method(x) | obj::method |
- 매개변수 없는 경우
Supplier<MyClass> s = () -> new MyClass();
//메소드참조로 수정
Supplier<MyClass> s = MyClass::new;
- 매개변수 있는 경우
// 매개변수 1개인 경우
Function<Integer, MyClass> s = (i) -> new MyClass(i);
// 인자로 Integer타입을 주는 것을 알고 있으므로, i는 생략가능하다.
//메소드참조로 수정
Function<Integer, MyClass> s = MyClass::new;
// -------------------------------------
//매개변수 2개인 경우
BiFunction<Integer, Character, MyClass> s = (i, c) -> new MyClass(i, c);
//메소드참조로 수정
BiFunction<Integer, Character, MyClass> s = MyClass::new;
// -------------------------------------
//배열과 메소드참조
Function<Integer, int[]> f = x-> new int[x];
Function<Integer, int[]> f = int[]:new;
사용예시:
public class Ex{
public static void main(String[] args) {
//Supplier는 입력X, 출력O
Supplier<MyClass> s = () -> new MyClass();
MyClass mc = s.get();
System.out.println(mc);
//매개변수 없는 생성자 메소드참조
Supplier<MyClass> s2 = MyClass::new;
MyClass mc2 = s2.get();
System.out.println(mc2);
//매개변수2개인 생성자
BiFunction<Integer, Character, MyClass> s3 = MyClass::new;
MyClass mc3 = s3.apply(10, 'C');
System.out.println(mc3);
//배열 만들기
Function<Integer, int[]> s4 = int[]::new;
int[] array = s4.apply(10);
System.out.println(array.length);
}
private static class MyClass {
int i;
Character c;
public MyClass() {}
public MyClass(Integer i, Character c) {
this.i = i;
this.c = c;
}
}
}
실행결과:
lambda.nam.lamdba.Ex1406$MyClass@75bd9247
lambda.nam.lamdba.Ex1406$MyClass@7dc36524
lambda.nam.lamdba.Ex1406$MyClass@129a8472
10
출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS
'java' 카테고리의 다른 글
Lambda 06 Stream의 연산 (중간 연산과 최종 연산) (0) | 2021.12.29 |
---|---|
Lambda 05 Stream (0) | 2021.12.27 |
Lambda 03 Predicate의 결합 (0) | 2021.12.26 |
Lambda 02 - java.util.function 패키지 (0) | 2021.12.23 |
Lambda 01 (0) | 2021.12.23 |