如果仅发送了T型,我计划设置我的协调器。
interface ViewSurface<T : Coordinator> {
var coordinator: T
fun setCoor(coordinator: Coordinator) {
if (coordinator is T) {
this.coordinator = coordinator
}
}
}
上面的代码抱怨
Cannot check for erased type: T
。如何更改以获取正确的语法却又实现了我想要的? 最佳答案
因为在运行时,所有通用类型参数都已消失(擦除),所以运行时无法真正检查coordinator is T
,因为它不知道T
是什么。
与其在分配之前检查coordinator
的类型,不如不将其参数类型从Coordinator
更改为T
,以便编译器可以保证coordinator
将始终可分配给接口(interface)中的coordinator
属性?
fun setCoor(coordinator: T) {
this.coordinator = coordinator
}
如您所见,实际上并不需要
setCoor
方法。您可以正常设置属性:coordinator = ...