Gymterview
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). Это частый уточняющий вопрос.