# 클래스 메소드 호출
{클래스명}::{클래스 메소드명}
# 인스턴스 메소드 호출
{클래스명}::{인스턴스메소드명}
{인스턴스}::{인스턴스메소드명}
# 클래스 생성자 호출
{클래스}::new
☕ Main.java
// 클래스의 클래스 메소드에 인자 적용하여 실행
Function<Integer, String> intToStrLD = (i) -> String.valueOf(i);
Function<Integer, String> intToStrMR = String::valueOf;
String intToStr = intToStrMR.apply(123);
// 인자로 받은 인스턴스의 메소드 실행
UnaryOperator<String> toLCaseLD = s -> s.toLowerCase();
UnaryOperator<String> toLCaseMR = String::toLowerCase;
String toLCase = toLCaseMR.apply("HELLO");
☕ Button.java
public class Button {
private String text;
public Button(String text) { this.text = text; }
public Button(String text, String sound) {
this(text);
onClickListener = () -> System.out.println(sound + " " + sound);
}
public String getText() { return text; }
private Runnable onClickListener;
public void setOnClickListener(Runnable onClickListener) {
this.onClickListener = onClickListener;
}
public void onClick () {
onClickListener.run();
}
}
☕ Main.java
// 클래스의 생성자 실행
Function<String, Button> strToButtonLD = s -> new Button(s);
Function<String, Button> strToButtonMR = Button::new;
Button button1 = strToButtonMR.apply("Dog");
BiFunction<String, String, Button> twoStrToButtonLD = (s1, s2) -> new Button(s1, s2);
BiFunction<String, String, Button> twoStrToButtonMR = Button::new;
Button button2 = twoStrToButtonMR.apply("고양이", "야옹");
button2.onClick();
System.out.println("\\n- - - - -\\n");
// 현존하는 인스턴스의 메소드 실행
Runnable catCryLD = () -> button2.onClick();
Runnable catCryMR = button2::onClick;
catCryMR.run();