如何比较Kotlin中的类型

如何比较Kotlin中的类型,kotlin,retrofit2,Kotlin,Retrofit2,我正在尝试测试“type”参数: class MyConverter : Converter.Factory() { override fun responseBodyConverter( type: Type, annotations: Array<Annotation>, retrofit: Retrofit ): Converter<ResponseBody, *> { if (typ

我正在尝试测试“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()
        }
    }
}
给我一个编译错误,指示“类型与用户设置不兼容”


但是如果我将type.toString()打印到日志中,它会显示类型为UserSettings。所以我不明白问题是什么。类似的Java代码可以很好地工作,但此Kotlin代码不能。我一定是在Kotlin中做错了什么。

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

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

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

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

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

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

您只能使用
is
检查来测试实例是否属于特定类型。这里,您有一个对象显然不属于类型
UserSettings
,它是一个
type
实例。检查
类型
的API是否有类似于
isSubtype
的内容。顺便问一下,
Type
来自哪个库?您只能使用
is
检查来测试实例是否属于特定类型。这里,您有一个对象显然不属于类型
UserSettings
,它是一个
type
实例。检查
类型
的API是否有类似于
isSubtype
的内容。顺便问一下,
Type
来自哪个库?