java8의 lambda 표현식 (방법 인용)

2063 단어
어떤 때는 당신이 다른 코드에 전달하고자 하는 조작이 이미 실현된 방법이 있다.예:
button.setOnAction(event -> System.out.println(event));

만약 당신이 println 방법만 setOnaction 방법에 전달할 수 있다면 더욱 좋습니다!다음은 수정된 코드입니다.
button.setOnAction(System.out::println);

표현식 System.out::println은 방법 인용으로 lambda 표현식과 같습니다.
x -> System.out.println(x)

예시 코드와 같이 조작부호는 방법명과 대상이나 클래스의 이름을 분리합니다.다음과 같은 세 가지 주요 사용 사례가 있습니다.
  • 대상::실례 방법
  • 클래스: 정적 방법
  • 류::실례 방법
  • 앞의 두 가지 상황에서 방법 인용은 방법 파라미터를 제공하는 lambda 표현식과 같다.앞서 설명한 대로 System.out::println은 System과 같습니다.out.println(x).비슷한, Math::pow는 (x, y)-> Math와 같습니다.pow(x,y).세 번째 경우 첫 번째 매개변수가 실행 방법의 객체가 됩니다.예를 들어 String::compareToIgnoreCase는 (x, y) -> x.compareToIgnoreCase(y)와 같습니다.
    주의: 같은 이름의 재부팅 방법이 여러 개 있다면 컴파일러는 상하문에서 가장 일치하는 방법을 찾으려고 시도할 것입니다.예를 들어, 두 가지 버전의 Math가 있습니다.max 방법, 하나의 수신 정형은 매개 변수이고, 다른 수신 더블 형식의 값은 매개 변수입니다.도대체 어떤 방법을 선택할지는Math::max가 변환된 함수식 인터페이스의 방법 매개 변수에 달려 있습니다.lambda 표현식과 유사하고 방법 인용도 독립적으로 존재하지 않으며 함수식 인터페이스로 변환되는 실례에 자주 사용된다.
    너는 또한 방법 인용 중의this 파라미터를 포획할 수 있다.예를 들어this::equals는 x->this와 같다.equals(x).너도 슈퍼 대상을 사용할 수 있다. 예를 들어 슈퍼::실례적인 방법이다.예:
    package java8;
    
    public class J2 {
        public static void main(String[] args) {
            Greeter g = new ConcurrentGreeter();
            g.greet();
        }
    }
    class Greeter {
        public void greet(){
            System.out.println("Hello world!");
        }
    }
    class ConcurrentGreeter extends Greeter{
        @Override
        public void greet() {
            //super             ,              
            Thread t = new Thread(super::greet);
            t.start();
        }
    }
    package java8;
    
    public class J3 {
        public static void main(String[] args) {
            Greeter1 g = new Greeter1();
            g.greet();
        }
    }
    class Greeter1 {
        public void greet() {
            //this         ,             
            Thread t = new Thread(this::printInfo);
            t.start();
        }
        public void printInfo(){
            System.out.println("test success!!");
        }
    }

    좋은 웹페이지 즐겨찾기