【发布时间】:2017-06-06 08:20:25
【问题描述】:
考虑一个通用的class Item 和继承它的特定class Event:
open class Item<T> {
fun copyFrom(item: T) {
if (this is Event && item is Event) {
owner = item.owner
value = item.value
}
}
}
class Event : Item<Event> {
open var owner = ""
open var value = 0
}
由于类型推断,我们不必将 Item 转换为 Event,我们可以直接访问 owner 和 value。但是它说item 是T 类型,不能在item is Event 子句中转换为Event。我认为这不应该发生,因为这个子句在 Java 中是正确的?
编辑:
我知道copyFrom 的实现应该在Event 中完成,但这只是为了演示类型推断问题。
【问题讨论】:
-
我认为除了缺少括号
class Event : Item<Event>()之外没有任何编译错误,您使用的是哪个版本?确切的错误信息是什么? -
在
class Event : Item<Event> {行添加缺少的构造函数调用后无法重现 -
它不是类型推断的一部分,它是 smartcast。
-
请说明您到底遇到了什么错误。现在,我正在标记这个问题。
-
感谢您的接受 :-)