junior
Что такое ссылка на метод?
Ссылка на метод (method reference) — это сокращённая запись лямбда-выражения, которое только вызывает уже существующий метод. Вместо x -> obj.method(x) записывается obj::method. Компилятор самостоятельно подставляет аргументы в вызов.
Синтаксис
| Вид ссылки | Синтаксис | Эквивалентная лямбда |
|---|---|---|
| На статический метод | ClassName::staticMethod |
x -> ClassName.staticMethod(x) |
| На метод экземпляра (конкретный объект) | obj::instanceMethod |
x -> obj.instanceMethod(x) |
| На метод экземпляра (произвольный объект данного типа) | ClassName::instanceMethod |
(obj, x) -> obj.instanceMethod(x) |
| На конструктор | ClassName::new |
x -> new ClassName(x) |
Пример
private interface Measurable {
int length(String string);
}
Measurable a = String::length;
System.out.println(a.length("abc")); // 3
Ссылки на методы потенциально более эффективны, чем лямбды, поскольку предоставляют компилятору дополнительную информацию о типе. Если есть выбор между лямбдой и ссылкой на существующий метод, предпочтение следует отдавать ссылке на метод — код получается короче и выразительнее.
На собеседовании: убедитесь, что различаете два вида ссылок на instance-метод: через конкретный объект (
System.out::println) и через тип (String::length). Это частый уточняющий вопрос.