Как сравнивать типы в Котлине - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь проверить параметр "type":

class MyConverter : Converter.Factory() {

    override fun responseBodyConverter(
        type: Type,
        annotations: Array<Annotation>,
        retrofit: Retrofit
    ): Converter<ResponseBody, *> {
        if (type is UserSettings) // Compiler complains of incompatible types
            return HtmlConverter.INSTANCE
        else
            return null
    }

    class HtmlConverter : Converter<ResponseBody, UserSettings> {
        companion object {
            val INSTANCE = HtmlConverter()
        }
    }
}

Но строка кода:

if (type is UserSettings)

дает мне ошибку компиляции, указывающую, что "тип несовместим с UserSettings"

Но если я печатаю type.toString () в журнал, он показывает, что тип - UserSettings. Так что я не понимаю, в чем проблема. Подобный код Java работает нормально, но этот код Kotlin - нет. Должно быть, я что-то не так делаю в Котлине.

1 Ответ

1 голос
/ 23 мая 2019

Вы смешиваете тип отражения с фактическим типом класса. is Тесты на реальном классе, в то время как java.lang.reflect.Type - это нечто другое. Кроме того, Type не является родительским классом UserSettings и не реализует интерфейс.

Если вы хотите проверить, ссылается ли ваш тип на UserSettings, вы должны сравнить, используя Type::getTypeName или запросив имя типа UserSettings. Следующий код должен работать:

if(type == UserSettings::class.java)
    return HtmlConverter.INSTANCE
else
    return null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...