kotlin.Char如何实现可序列化? (未明确定义)

时间:2018-10-28 15:23:26

标签: kotlin

kotlin.Char的定义如下:

public class Char private constructor() : Comparable<Char> {
...
}

Comparable<T>的定义为:

public interface Comparable<in T> {
    public operator fun compareTo(other: T): Int
}

那么Serializable是一个字符吗?

fun main(args: Array<String>) {
  println('A'::class) // class kotlin.Char
  println('A'::class.java) // char
  println('A' is java.io.Serializable) // true
}
  • 在编译时是否向字节码添加了一些内容?
  • 在任何地方都有记录吗?

1 个答案:

答案 0 :(得分:4)

JVM上的基本类型(例如IntDoubleChar等)是通过以下两种方式之一(documentation)表示的:

  • 尽可能以原语(intdoublechar
  • 需要为空时或用作通用类型参数时,作为各自的包装器类(IntegerDoubleCharacter)。

这两种表示都是可序列化的。默认情况下,原始类型默认情况下可序列化,并且它们的包装器也全部实现Serializable,例如,在Character的文档中可以看到。

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

问题是,为什么Kotlin表示法在源代码级别上没有Serializable作为超类型?我的猜测是,让它们保持平台独立性,因为让它们明确实现java.io.Serializable会使它们直接取决于JVM类型。