ice*_*000 3 inheritance types casting kotlin
首先,我试过:
interface Super
class A : Super
class B : Super
val a = if (System.currentTimeMillis() >= 100) A() else B()
Run Code Online (Sandbox Code Playgroud)
我按下Ctrl Q检查的类型a.它的Super,符合市场预期.
但当我尝试时:
val someVar = if (System.currentTimeMillis() > 0) 1 else 1.0
Run Code Online (Sandbox Code Playgroud)
它说someVar是一个Any.不应该是一个Number?
问题是:这两个Double和Int是子类型的Number 和 Comparable,即它们有两种不同类型的超级.
如果您将示例更改为以下内容,那么您的变量也将Any从那时开始A,B不仅仅是Super:
interface Super
class A : Super, Serializable
class B : Super, Serializable
//a is of type Any
val a = if (System.currentTimeMillis() >= 100) A() else B()
Run Code Online (Sandbox Code Playgroud)
如果您希望变量类型,则可以显式声明变量的类型Number:
val someVar: Number = if (System.currentTimeMillis() > 0) 1 else 1.0
Run Code Online (Sandbox Code Playgroud)