Назад к вопросам
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.