방법에 소비자 <문자열>을 통과하는 방법

입 :

그래서 이런 코드가 수행

public ConsumerTestClass(Consumer<String> consumer) {

}

public static void printString(String text) {
    System.out.println(text);

}

그리고 다른 클래스의 방법에서, 나는의 객체를 생성하고 싶습니다 ConsumerTestClass:

new ConsumerTestClass(/*passing consumer here*/);

내가 전달하고 싶은 소비자 등 ConsumerTestClass::printString이 그 모양 때문에,하지만 난뿐만 아니라 인수를 전달할 필요가 있다고 할 수 있기를 : (text) -> ConsumerTestClass.printString(text). 그리고 내 질문은 유일한 옵션은 소비자에 합격하거나, 하나 개의 인수를 받아들이고 어떤 결과를 반환하지 않습니다 방법은 ...입니까?

라빈 드라 Ranwala :

상기 방법은 참조 번호 ConsumerTestClass::printString에 해당 람다 식에 불과하다 문법적text -> ConsumerTestClass.printString(text)

참조 방법은 임의의 방법에 사용될 수 없다. 그들은 단지 하나의 방식의 람다 식을 대체하는 데 사용할 수 있습니다. 일반적으로, 우리는 방법 참조에 paremeters을 통과 할 필요가 없습니다. 이 경우, 법에 의해 촬영 매개 변수는 printString장면 뒤에 자동으로 전달됩니다.

방법 참조는 더욱 간결 람다 이상의 객체 기능을 생성 할 수있는 방법을 제공합니다.

그래서 좋은 연습으로 람다에 방법 참조를 선호합니다.

여기에 완벽하게 동작하는 예제입니다.

public class ConsumerTestClass {
    public ConsumerTestClass(Consumer<String> consumer) {
        consumer.accept("Test");
    }

    public static void printString(String text) {
        System.out.println(text);

    }

    public static void main(String[] args) {
        new ConsumerTestClass(ConsumerTestClass::printString);
    }
}

결론은 당신이 호출 할 때 인수를 전달해야한다는 것입니다 accept의 방법을 Consumer위의 생성자 내부에서 수행한다.

추천

출처http://43.154.161.224:23101/article/api/json?id=185821&siteId=1