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
}
答案 0 :(得分:4)
JVM上的基本类型(例如Int
,Double
,Char
等)是通过以下两种方式之一(documentation)表示的:
int
,double
,char
)Integer
,Double
,Character
)。这两种表示都是可序列化的。默认情况下,原始类型默认情况下可序列化,并且它们的包装器也全部实现Serializable
,例如,在Character
的文档中可以看到。
在Java互操作文档中,here也提到了Kotlin和Java类型之间的这种映射。
问题是,为什么Kotlin表示法在源代码级别上没有Serializable
作为超类型?我的猜测是,让它们保持平台独立性,因为让它们明确实现java.io.Serializable
会使它们直接取决于JVM类型。