【发布时间】:2019-11-29 16:56:13
【问题描述】:
倒数第二行没有编译,但最后一行编译正常:
- 是什么原因(他们好像和我一样)?
- 我可以进行哪些更改以使
return if(true) m1 else m2能够编译?
编译错误:
类型不匹配:推断类型为
Hold<HelloMsg>但应为Hold<Msg>
interface Msg
class HelloMsg: Msg
class ByeMsg: Msg
class Hold<T: Msg>(val msg: T)
fun test(): Hold<Msg> {
val m1 = Hold(HelloMsg())
val m2 = Hold(ByeMsg())
return if(true) m1 else m2 //DOESN'T COMPILE
return if(true) Hold(HelloMsg()) else Hold(ByeMsg()) //COMPILES
}
【问题讨论】:
-
我想我已经有了第二个问题的答案:
fun test(): Hold<out Msg> { ... }