Какой результат компиляции companion object в Kotlin в отношении Java-кода?

В Kotlin companion object компилируется в Java как статический вложенный класс внутри внешнего класса. Все члены companion object становятся статическими методами и полями этого вложенного класса.

Короткий ответ

Что ответить на собеседовании

В Kotlin companion object компилируется в Java как статический вложенный класс внутри внешнего класса. Все члены companion object становятся статическими методами и полями этого вложенного класса.

Подробный разбор

Ответ с пояснениями

Условие

Какой результат компиляции companion object в Kotlin в отношении Java-кода?

Ответ

В Kotlin companion object компилируется в Java как статический вложенный класс внутри внешнего класса. Все члены companion object становятся статическими методами и полями этого вложенного класса.

При этом для удобства вызова из Java создаётся статическое поле с именем Companion в внешнем классе, через которое можно получить доступ к членам companion object.

Например, Kotlin-код:

class MyClass {
    companion object {
        fun foo() = "Hello"
    }
}

Компилируется в Java примерно так:

public final class MyClass {
    public static final MyClass.Companion Companion = new MyClass.Companion(null);

    public static final class Companion {
        public final String foo() {
            return "Hello";
        }
    }
}

Таким образом, из Java можно вызвать метод так:

String greeting = MyClass.Companion.foo();

Если в companion object объявлены аннотации @JvmStatic, то соответствующие методы и поля будут сгенерированы как статические члены внешнего класса, что позволяет вызывать их напрямую без обращения к Companion.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку