Перейти к содержимому
На этой странице

Ссылки на методы

Все темы Java Developer

Что такое «ссылка на метод»?

Ссылка на метод (Method reference) в Java представляет собой компактный способ передать ссылку на существующий метод вместо явного написания лямбда-выражения. Она используется для передачи метода как параметра в функции или для создания экземпляра функционального интерфейса.

Основные типы ссылок на методы:
  1. Ссылка на статический метод:

    • Пример: ClassName::staticMethodName.

    • Используется для вызова статического метода класса.

  2. Ссылка на метод экземпляра объекта:

    • Пример: objectInstance::instanceMethodName.

    • Используется для вызова метода конкретного объекта.

  3. Ссылка на метод экземпляра по ссылке класса:

    • Пример: ClassName::instanceMethodName.

    • Для ClassName::instanceMethodName получателем становится первый аргумент функционального интерфейса, остальные передаются методу. Например, String::toUpperCase соответствует s -> s.toUpperCase().


Какие виды ссылок на методы вы знаете?

В Java существует несколько видов ссылок на методы, которые позволяют передавать методы как параметры или использовать их в функциональных интерфейсах более компактным способом, чем лямбда-выражения.

Основные виды ссылок на методы:
  1. Ссылка на статический метод:

    • Это ссылка на статический метод класса.

    • Синтаксис: ClassName::staticMethodName.

    • Пример: Здесь Output::printMessage — это ссылка на статический метод printMessage класса Output.

      interface Printer {
          void print(String message);
      }
      
      class Output {
          public static void printMessage(String message) {
              System.out.println(message);
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              Printer printer = Output::printMessage;
              printer.print("Hello, world!");
          }
      }
  2. Ссылка на метод экземпляра объекта:

    • Это ссылка на метод экземпляра конкретного объекта.

    • Синтаксис: objectInstance::instanceMethodName.

    • Пример: Здесь person::printName — это ссылка на метод printName объекта person.

      interface Printer {
          void print(String message);
      }
      
      class Person {
          public void printName(String name) {
              System.out.println("Name: " + name);
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              Person person = new Person();
              Printer printer = person::printName;
              printer.print("John Doe");
          }
      }
  3. Ссылка на метод экземпляра по ссылке класса:

    • Это несвязанная ссылка на метод экземпляра: объект-получатель передаётся первым аргументом при вызове функционального интерфейса.

    • Синтаксис: ClassName::instanceMethodName.

    • Ниже processor::convertToUpper показывает связанную ссылку на конкретный объект. Для несвязанной ссылки можно написать Function<String, String> upper = String::toUpperCase; и вызвать upper.apply(“hello”).

      interface Processor {
          String process(String input);
      }
      
      class TextProcessor {
          public String convertToUpper(String input) {
              return input.toUpperCase();
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              TextProcessor processor = new TextProcessor();
              Processor myProcessor = processor::convertToUpper;
              String result = myProcessor.process("hello");
              System.out.println(result);
          }
      }
  4. Ссылка на конструктор:

    • Это ссылка на конструктор класса.

    • Синтаксис: ClassName::new.

    • Пример: Здесь MyClass::new — это ссылка на конструктор класса MyClass.

      interface MyFactory {
          MyClass create(String name, int value);
      }
      
      class MyClass {
          private String name;
          private int value;
      
          public MyClass(String name, int value) {
              this.name = name;
              this.value = value;
          }
      
          public String getName() {
              return name;
          }
      
          public int getValue() {
              return value;
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              MyFactory factory = MyClass::new;
              MyClass instance = factory.create("example", 42);
              System.out.println("Name: " + instance.getName());
              System.out.println("Value: " + instance.getValue());
          }
      }

Собеседования: Java

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Java-разработчик, Backend-разработчик на Java. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.