Kotlin:多个命名伴侣对象

mds*_*mmo 2 kotlin

我确定这是以前问过的,但我似乎找不到答案:

我有一堂课暗示了java.io.Serializableandroid.os.Parcelable。这些类需要以下伴随对象:

companion object CREATOR : Parcelable.Creator<MyClass> {
    override fun createFromParcel(parcel: Parcel): MyClass
    ...
}
Run Code Online (Sandbox Code Playgroud)

companion object {
    private val serialVersionUid: Long = 123
}

Run Code Online (Sandbox Code Playgroud)

问题是我不能同时拥有这两个伴随对象,因为这会导致only one companion object per class异常。

如何在同一个类中有两个名称不同的伴随对象?

Irc*_*ver 6

可能是您误解了Java示例。

public static Parcelable.Creator<SDFileDir> CREATOR = ...;
public static long serialVersionUid = 123;
Run Code Online (Sandbox Code Playgroud)

在Java中-是的,它是分离的静态对象。您可以在类中放置任意数量的静态字段。

在Kotlin中,应该只有一个静态对象(在此称为Companion)。但这就像这里的另一堂课。因此,所有新的静态字段都应位于其中。

companion object {
    @JvmField
    val CREATOR: Parcelable.Creator<SDFileDir> = ...
    val serialVersionUid: Long = 123
}
Run Code Online (Sandbox Code Playgroud)

还有一件事:注释@JvmField可正确与Java一起使用。