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代码时添加的东西吗
- 有记录吗
Int
、Double
、Char
等基本类型在JVM上以两种方式(文档(之一表示:
- 只要可能,作为基元(
int
、double
、char
( - 当被要求为null时,或者当被用作泛型类型参数时,作为相应的包装器类(
Integer
、Double
、Character
(
这两种表示都是可序列化的。默认情况下,基元类型是可序列化的,它们的包装器也都实现了Serializable
,例如,正如您在Character
的文档中看到的那样。
Java互操作文档中也提到了Kotlin和Java类型之间的这种映射。
所以问题是,为什么Kotlin表示不将Serializable
作为源代码级别的超类型?我的猜测是,它们保持独立于平台,因为让它们显式地实现java.io.Serializable
将使它们直接依赖于JVM类型。