为什么kotlin.Char是可序列化的?(未明确定义)

为什么kotlin.Char是可序列化的?(未明确定义),kotlin,Kotlin,kotlin.Char的定义如下: public class Char private constructor() : Comparable<Char> { ... } 它是在编译字节码时添加的吗 它在任何地方都有记录吗 基本类型,如Int、Double、Char等,在JVM上以两种方式之一表示(): 只要可能,作为原语(int,double,char) 当要求为空或用作泛型类型参数时,作为相应的包装类(Integer,Double,Character) 这两种表示都是可序列

kotlin.Char
的定义如下:

public class Char private constructor() : Comparable<Char> {
...
}
  • 它是在编译字节码时添加的吗
  • 它在任何地方都有记录吗

    • 基本类型,如
      Int
      Double
      Char
      等,在JVM上以两种方式之一表示():

      • 只要可能,作为原语(
        int
        double
        char
      • 当要求为空或用作泛型类型参数时,作为相应的包装类(
        Integer
        Double
        Character
      这两种表示都是可序列化的。基本类型在默认情况下是可序列化的,它们的包装器也都实现了
      serializable
      ,例如,您可以在的文档中看到

      Java互操作文档中也提到了Kotlin和Java类型之间的这种映射


      所以问题是,为什么Kotlin表示在源代码级别上没有可序列化的超类型?我的猜测是,它们保持平台独立,因为让它们显式实现
      java.io.Serializable
      将使它们直接依赖于JVM类型。

      基本类型,如
      Int
      Double
      Char
      等,在JVM上以两种方式之一()表示:

      • 只要可能,作为原语(
        int
        double
        char
      • 当要求为空或用作泛型类型参数时,作为相应的包装类(
        Integer
        Double
        Character
      这两种表示都是可序列化的。基本类型在默认情况下是可序列化的,它们的包装器也都实现了
      serializable
      ,例如,您可以在的文档中看到

      Java互操作文档中也提到了Kotlin和Java类型之间的这种映射

      所以问题是,为什么Kotlin表示在源代码级别上没有可序列化的超类型?我的猜测是,它们保持平台独立,因为让它们显式实现
      java.io.Serializable
      将使它们直接依赖于JVM类型

      public interface Comparable<in T> {
          public operator fun compareTo(other: T): Int
      }
      
      fun main(args: Array<String>) {
        println('A'::class) // class kotlin.Char
        println('A'::class.java) // char
        println('A' is java.io.Serializable) // true
      }