如何在Kotlin中比较类型

时间:2019-05-23 17:37:42

标签: kotlin retrofit2

我正在尝试测试“ 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 个答案:

答案 0 :(得分:1)

您正在将反射类型与实际的类类型混合在一起。 is在实际的类上进行测试,而java.lang.reflect.Type则有所不同。此外,Type不是UserSettings的父类,也不是实现接口的对象。

如果要测试类型是否引用了UserSettings,则必须使用Type::getTypeName或通过查询UserSettings的类型名称进行比较。以下代码应该起作用:

if(type == UserSettings::class.java)
    return HtmlConverter.INSTANCE
else
    return null