How to generate serialVersionUID for kotlin exceptions?

As kotlin does not have static fields, should it be defined serialVersionUIDin a companion object? IDEA has lost the ability to generate this field for classes ...

+4
source share
2 answers

Yes, you can declare it in a companion object. The document says:

In addition, public properties defined by objects and companion objects, as well as top-level properties annotated with const, are converted to static fields in Java

But this is similar to private properties:

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       
}
+3
source

serialVersionUID Kotlin, , .

- 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 , .

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

, getter getSerialVersionUID MySpecialCase, .

serialVersionUID Serializable.

+3

Source: https://habr.com/ru/post/1619633/


All Articles