由于kotlin没有静态字段,我应该在companion object中定义serialVersionUID吗?

推荐答案

Yes, you can declare it in the companion object. The doc says:

此外,在Java语言中,对象和伴随对象中定义的公共属性以及用const注释的顶级属性都会转换为静电字段

但私有房产似乎也是如此:

class MyException: Exception() {
    companion object {
        private val serialVersionUid: Long = 1
    }
}

javap-c-p com.ninja_squad.kotlindiscovery.MyException.class

Compiled from "MyException.kt"
public final class com.ninja_squad.kotlindiscovery.MyException extends java.lang.Exception {
  private static final long serialVersionUid;

  public static final com.ninja_squad.kotlindiscovery.MyException$Companion Companion;

  static {};
    Code:
       0: getstatic     #38                 // Field com/ninja_squad/kotlindiscovery/MyException$Companion.INSTANCE:Lcom/ninja_squad/kotlindiscovery/MyException$Companion;
       3: putstatic     #40                 // Field Companion:Lcom/ninja_squad/kotlindiscovery/MyException$Companion;
       6: lconst_1      
       7: putstatic     #21                 // Field serialVersionUid:J
      10: return        

  public com.ninja_squad.kotlindiscovery.MyException();
    Code:
       0: aload_0       
       1: invokespecial #15                 // Method java/lang/Exception."<init>":()V
       4: return        

  public static final long access$getSerialVersionUid$cp();
    Code:
       0: getstatic     #21                 // Field serialVersionUid:J
       3: lreturn       
}

Kotlin相关问答推荐

如何在Kotlin中为接受varargs的函数添加带有默认值的新参数?

Kotlin多平台(KMP)保存到文件不能在iOS上保存

Kotlin 说不需要强制转换,但删除后会出现新警告

如何在 Kotlin 中初始化 Short 数组?

TzdbZoneRulesProvider 在 java.time 中不工作

ActivityResultContracts TakePicture 结果总是返回 false

如何在 Kotlin 中为变量分配另一个变量的值?

如何使用 Either monad 并避免嵌套 flatMap

Moshi:解析单个对象或对象列表(kotlin)

AIDL 中的 Parcelize 注释:Incompatible types: Object cannot be converted to MyCustomObject

如何从定义它们的类外部调用扩展方法?

在构造函数中仅注入某些参数

验证和 DDD - kotlin 数据类

API 26 上未显示 Android 通知

Kotlin中具有多个参数的绑定适配器

修改扩展函数中的this

类型不匹配推断类型为单位,但应为空

Kotlin out-projected 类型禁止使用

Android Kotlin .visibility

项目不会使用 Kotlin 1.1.3 构建