科特林怎么了.字符是可序列化的吗?(未明确定义)



kotlin.Char的定义方式如下:

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

其中Comparable<T>定义为:

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

那么为什么Char是Serializable呢?

fun main(args: Array<String>) {
println('A'::class) // class kotlin.Char
println('A'::class.java) // char
println('A' is java.io.Serializable) // true
}
  • 这是在编译Byte代码时添加的东西吗
  • 有记录吗

IntDoubleChar等基本类型在JVM上以两种方式(文档(之一表示:

  • 只要可能,作为基元(intdoublechar(
  • 当被要求为null时,或者当被用作泛型类型参数时,作为相应的包装器类(IntegerDoubleCharacter(

这两种表示都是可序列化的。默认情况下,基元类型是可序列化的,它们的包装器也都实现了Serializable,例如,正如您在Character的文档中看到的那样。

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

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

最新更新