Sobes.tech
Назад к вопросам
Junior — Middle
68

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

Компании, где спрашивали
Магнит Тех

Ответ от нейросети

sobes.tech AI

В 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.