---
title: Ссылки на методы
seo:
  title: Ссылки на методы — Java Developer
  description: Тема «Ссылки на методы» для собеседования Java Developer. Что такое «ссылка на метод»? Какие виды ссылок на методы вы знаете?
---

[Все темы Java Developer](/java-developer)

## <strong>Что такое «ссылка на метод»?</strong> [#q-14bee738d69b8118bef5faa001727778]

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

<strong>Основные типы ссылок на методы&#58;</strong>

{/* prettier-ignore */}
1. <strong>Ссылка на статический метод</strong>&#58;

    - Пример&#58; <code>ClassName&#58;&#58;staticMethodName</code>.

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

1. <strong>Ссылка на метод экземпляра объекта</strong>&#58;

    - Пример&#58; <code>objectInstance&#58;&#58;instanceMethodName</code>.

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

1. <strong>Ссылка на метод экземпляра по ссылке класса</strong>&#58;

    - Пример&#58; <code>ClassName&#58;&#58;instanceMethodName</code>.

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

:::note[Ссылки для изучения]

1. [Ссылки на методы в Java](https://ru.hexlet.io/courses/java-functions/lessons/method-references/theory_unit)
   :::

---

## <strong>Какие виды ссылок на методы вы знаете?</strong> [#q-14bee738d69b81deb304ea360e2f72b8]

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

<strong>Основные виды ссылок на методы&#58;</strong>

{/* prettier-ignore */}
1. <strong>Ссылка на статический метод</strong>&#58;

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

    - Синтаксис&#58; <code>ClassName&#58;&#58;staticMethodName</code>.

    - Пример&#58;
       Здесь <code>Output&#58;&#58;printMessage</code> — это ссылка на статический метод <code>printMessage</code> класса <code>Output</code>.

        ```java
        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!");
            }
        }
        ```

1. <strong>Ссылка на метод экземпляра объекта</strong>&#58;

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

    - Синтаксис&#58; <code>objectInstance&#58;&#58;instanceMethodName</code>.

    - Пример&#58;
       Здесь <code>person&#58;&#58;printName</code> — это ссылка на метод <code>printName</code> объекта <code>person</code>.

        ```java
        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");
            }
        }
        ```

1. <strong>Ссылка на метод экземпляра по ссылке класса</strong>&#58;

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

    - Синтаксис&#58; <code>ClassName&#58;&#58;instanceMethodName</code>.

    - Ниже processor&#58;&#58;convertToUpper показывает связанную ссылку на конкретный объект. Для несвязанной ссылки можно написать Function&#60;String, String&#62; upper = String&#58;&#58;toUpperCase; и вызвать upper.apply("hello").

        ```java
        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);
            }
        }
        ```

1. <strong>Ссылка на конструктор</strong>&#58;

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

    - Синтаксис&#58; <code>ClassName&#58;&#58;new</code>.

    - Пример&#58;
       Здесь <code>MyClass&#58;&#58;new</code> — это ссылка на конструктор класса <code>MyClass</code>.

        ```java
        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());
            }
        }
        ```

:::note[Ссылки для изучения]

1. [Ссылки на методы в Java](https://ru.hexlet.io/courses/java-functions/lessons/method-references/theory_unit)
   :::
