我正在尝试测试“ 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代码则不能。我一定在科特林做错了事。
答案 0 :(得分:1)
您正在将反射类型与实际的类类型混合在一起。 is
在实际的类上进行测试,而java.lang.reflect.Type
则有所不同。此外,Type
不是UserSettings的父类,也不是实现接口的对象。
如果要测试类型是否引用了UserSettings,则必须使用Type::getTypeName
或通过查询UserSettings的类型名称进行比较。以下代码应该起作用:
if(type == UserSettings::class.java)
return HtmlConverter.INSTANCE
else
return null