我在 Kotlin 中编写了这个方法并分析了字节码:
情况一
class A {
object b {
fun doSomething() {}
}
}
情况2
class A {
companion object b {
fun doSomething() {}
}
}
情况 3
fun doSomething() {}
字节码结果
- 情况1:班级
Test$asb
,public final doSomething()I
- 情况2:班级
Test$Companion
,public final doSomething()I
- 情况3:班级
TestKt
,public final static doSomething()I
我的问题是:
我有一个枚举类,我想返回一个给定枚举变量的枚举实例,例如 findById
(enum(id, color))
。我该怎么做?伴侣对象?目的?似乎拥有真正静态方法的唯一方法是在包级别,没有类声明。但这变得有点过于全球化了。有什么方法可以通过: 访问它
ClassName.staticMethod
, staticMethod 真的是静态的。提供包声明方法、伴生对象和对象的有意义的示例。
语境。我一直在使用 Kotlin 进行编码,我觉得它很棒。但有时我需要做出决定:例如,在 java 中我会声明为 static final 的重不可变属性,但在 Kotlin 中我发现很难“找到等价物”。