Ссылка на метод ConsumerTestClass::printString
является просто синтаксическим сахаром для эквивалентного лямбда-выражения text -> ConsumerTestClass.printString(text)
Ссылка на метод не может использоваться ни для одного метода.Они могут использоваться только для замены лямбда-выражения с одним методом.В общем, нам не нужно передавать параметры в ссылки на методы.В этом случае параметры, взятые методом 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
как сделано внутри конструктора выше.