当前位置:  开发笔记 > 编程语言 > 正文

如何为kotlin异常生成serialVersionUID?

如何解决《如何为kotlin异常生成serialVersionUID?》经验,为你挑选了2个好方法。

由于kotlin没有静态字段,我应该serialVersionUID在伴随对象中定义吗?



1> Jayson Minar..:

serialVersionUID在Kotlin中创建一个类,您有一些选项,包括将一个成员添加到该类的伴随对象.

最简洁的字节码来自a private const val将成为包含类的私有静态变量,在这种情况下MySpecialCase:

class MySpecialCase : Serializable {
    companion object {
        private const val serialVersionUID: Long = 123
    }
}

您也可以使用这些表单,每个表单都具有getter/setter方法的副作用,这些方法不是序列化所必需的...

class MySpecialCase : Serializable {
    companion object {
        private val serialVersionUID: Long = 123
    }
}

这会创建静态字段,但也会getSerialVersionUID在随播对象上创建一个不必要的getter .

class MySpecialCase : Serializable {
    companion object {
        @JvmStatic private val serialVersionUID: Long = 123
    }
}  

这会创建静态字段,但也会getSerialVersionUID在包含类上创建静态getter,MySpecialCase这是不必要的.

但是所有工作都是将其添加serialVersionUIDSerializable类中的方法.



2> JB Nizet..:

是的,您可以在伴随对象中声明它。医生说:

而且,在对象和伴随对象中定义的公共属性以及用const注释的顶级属性在Java中都变成了静态字段

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

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."":()V
       4: return        

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


不是`serialVersionUid`,而是`serialVersionUID`。更好的答案:/sf/ask/17360801/
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有