Могу ли я проверить переменную типа T? - PullRequest
0 голосов
/ 02 июля 2018

Я планирую установить координатора, только если отправлено типа 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. Как я могу измениться, чтобы получить правильный синтаксис, и в то же время достичь того, чего хотел?

1 Ответ

0 голосов
/ 02 июля 2018

Поскольку во время выполнения все параметры универсального типа исчезают (стираются), среда выполнения не может действительно проверить, является ли coordinator is T, потому что не имеет представления, что такое T.

Вместо проверки типа coordinator перед его назначением, почему бы не изменить тип параметра с Coordinator на T, чтобы компилятор мог гарантировать, что coordinator всегда будет назначаться к свойству coordinator в интерфейсе?

fun setCoor(coordinator: T) {
    this.coordinator = coordinator
}

Как видите, метод setCoor на самом деле не нужен. Вы можете просто установить свойство как обычно:

coordinator = ...
...