Kotlin中类型:: class与类型之间有什么区别

时间:2019-08-08 04:22:25

标签: inheritance kotlin

给出以下代码:

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之间有什么区别?

2 个答案:

答案 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