如果仅发送了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 = ...

09-06 19:09