입 :
그래서 이런 코드가 수행
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
위의 생성자 내부에서 수행한다.