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