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