给出以下代码:
val a: A = A()
val b: B = a
println("${a::class} and ${b::class}")
我希望输出class A and class B
,但实际输出是class A and class A
那么,type
和::class
之间有什么区别?
答案 0 :(得分:1)
您的变量b
的类型为B
,但它指向A
的实例。
访问::class
时,这将检查两种情况下类型均为A
的运行时引用。
答案 1 :(得分:0)
与Java一样,Kotlin是静态类型的。您必须区分编译时间和运行时类型。
a
的编译时间类型为A
,对于b
,它的编译时间类型为B
。编译器根据声明类型进行推断。
但是两者的运行时类型均为A
。
a::class
(称为类文字语法)将为您提供对Kotlin类的运行时引用。
请注意,如果让编译器推断b
的类型而不是明确指定,b
的编译时间类型也将是A
。
val b = a // compiler infers -> val b: A = a