【发布时间】:2018-11-26 21:33:04
【问题描述】:
class A
{
val b:B
val at:String
init
{
b=B(this)
at="A's text"
}
}
class B(a:A)
{
val bt:String
init
{
bt= if(a.at!=null) a.at.replaceFirst("A's","B's") else "else's text"
}
}
这段代码会产生警告
条件 'a.at!=null' 始终为 'true'
但实际上条件 'a.at!=null' 始终为假。
【问题讨论】:
-
a.at的类型是String,它是非空的(提示:String?是可空的,String是非空的)。那么“它总是错误的”是什么意思? -
即使
a.at不为空,条件a.at!=null也将始终为假。检查此代码的输出link -
哦,你的意思是这个。结果取决于顺序。如果
class A的init中的两行交换,那么结果将是预期的。不知道这是不是语法分析的bug。 -
有什么特别的原因为什么你在
init块中初始化所有属性而不是就地?虽然这不会影响这个问题。
标签: kotlin