Method Reference
- 타입만 맞춰주면 내부적으로 연결된다.
인터페이스의 데이터 타입이 맞으면 동작을 보장.
ex)
btn.setListener(dialog::doOnClick); // Method Reference - 타입만 맞춰주면 내부적으로 연결한다.
btn.setListener(System.out::println);
Stream<Button1> stream = Arrays.stream(labels).map(Button1::new); // Construct Reference
- @FunctionalInterface
- interface IClickListener {
- void onClick(String s);
- }
- class Button1 {
- private List<IClickListener> listeners = new ArrayList<>();
- private String text;
- public Button1 (){}
- public Button1(String s) {
- text = s;
- System.out.println(text);
- }
- public void setListener(IClickListener listener) {
- this.listeners.add(listener);
- }
- public void onClick() {
- // for(IClickListener l : listeners) {
- // l.onClick("click");
- // }
- listeners.forEach(System.out::println); // 동일 동작
- }
- }
- class Dialog {
- public void doOnClick(String text) {
- System.out.println(text);
- }
- }
- @FunctionalInterface // 단일추상메소드 인터페이스임을 알림
- // 컴파일러가 메소드가 하나만 존재해야 한다는 것을 보장.
- interface IFoo { // 단일 인터페이스
- void foo(String s, String s1);
- // void goo(); // 두개는 선언 못한다.
- }
- @FunctionalInterface
- interface IGoo {
- void goo();
- }
- public class Ex2 {
- public static void goo(String s ) {
- System.out.println("goo" + s);
- }
- public static void main(String[] args) {
- IFoo foo = (s, s1) -> System.out.println(s + s1);
- // IFoo foo = s -> System.out.println(s); // 인자가 하나인 경우 괄호가 생략 가능하다.
- foo.foo("d", "c");
- Button1 btn = new Button1();
- // 메소드 레퍼런스
- // 메소드를 맵핑 시킨다.
- Dialog dialog = new Dialog();
- btn.setListener(dialog::doOnClick); // 타입만 맞춰주면 내부적으로 연결한다.
- btn.setListener(System.out::println);
- btn.setListener(Ex2::goo);
- btn.onClick();
- String[] labels = {"AAA","BBB","CCC"};
- Stream<Button1> stream = Arrays.stream(labels).map(Button1::new); // Construct Reference
- stream.forEach(Button1::onClick);
- }
- }
'java' 카테고리의 다른 글
Java 8 신기능 정리 - Stream (0) | 2014.07.02 |
---|---|
Java 8 신기능 정리 - Default Method (0) | 2014.07.02 |
Java 8 신기능 정리 - Lambda Expression (0) | 2014.07.01 |
Java7 의 신기능 정리 (0) | 2014.07.01 |
Java 7 try catch 문법. autocloseable (0) | 2014.06.20 |