본 게시물은 스스로의 공부를 위한 글입니다.
틀린 내용이 있을 수 있습니다.
클래스::메서드
(x) -> ClassName.method(x) //람다식
ClassName::method //메서드 참조
Integer method(String s){
return Integer.parseInt(s);
}
Function<String, Integer> f = (String s)->Integer.parseInt(s); //람다식
Function<String, Integer>
을 보자.String
이고 output이 Integer
이라는 정보를 이미 담고있다.Function<String, Integer> f = Integer::parseInt; //메소드 참조
메소드 레퍼런스 코드가 이해가 안되다면, 거꾸로 람다식으로 바꿔서 이해해보자.
타입::new
파라미터가 없는 경우
Supplier<MyClass> s = () -> new MyClass(); //람다식
Supplier<MyClass> s = MyClass::new //메서드 참조
파라미터가 1개인 경우(파라미터가 2개이면 BiFunction 사용하면 된다.)
Function<Integer, MyClass> s = i -> new MyClass(i); //람다식
Function<Integer, MyClass> s = MyClass::new; //람다식
배열과 메서드 참조
Function<Integer, int []> s = i -> new int[i]; //람다식
Function<Integer, int []> s = int[]::new; //람다식
객체 레퍼런스::인스턴스 메소드
거의 안쓴다.
(x) -> obj.method(x) //람다
obj::method //메서드 참조
public class Main {
public static void main(String[] args) {
//스태틱 메소드 참조
Function<String, String> hi=Greeting::hi;
hi.apply("user");
//생성자 참조(인자 없는 생성자)
Supplier<Greeting> newGreeting=Greeting::new;
//생성자 참조(String 받는 생성자)
Function<String, Greeting> greeting=Greeting::new;
//인스턴스 메소드 참조
Greeting obj=new Greeting();
Function<String, String> hello=obj::hello;
}
}
class Greeting{
private String name;
public Greeting(){}
public Greeting(String name){
this.name=name;
}
public String hello(String name){
return "hello "+name;
}
public static String hi(String name){
return "hi "+name;
}
}