Я написал эти методы в Котлине и проанализировал байт-код:
Ситуация 1
class A {
object b {
fun doSomething() {}
}
}
Ситуация 2
class A {
companion object b {
fun doSomething() {}
}
}
Ситуация 3
fun doSomething() {}
Результат байткода
- Ситуация 1:
Test$asb
классаTest$asb
,public final doSomething()I
- Ситуация 2:
Test$Companion
классаTest$Companion
,public final doSomething()I
- Ситуация 3: класс
TestKt
,public final static doSomething()I
Мои вопросы:
-
У меня есть класс enum, и я хочу вернуть enum instace с переменной enum, например findById
(enum(id, color))
. Как мне это сделать? Сопутствующий объект? объект? -
Кажется, единственный способ иметь реальный статический метод на уровне пакета, без объявления класса. Но это становится немного слишком глобальным. Есть ли способ получить к нему доступ через:
ClassName.staticMethod
, staticMethod действительно статичен. -
Предоставьте значащие примеры методов объявления пакета, объекта и объекта сопутствующих объектов.
Контекст. Я кодировал в Котлине, и я нахожу это удивительным. Но иногда мне нужно принять решение: например, тяжелое неизменяемое свойство, которое в java я объявляю статичным окончательным, но в Котлине мне трудно "найти эквивалент".