Kotlin 警告:类型...的条件分支结果是 Any 的隐式转换?
Kotlin warning: Conditional branch result of type ... is implicity cast of Any?
当我尝试做这样的事情时,我收到 "Conditional branch result of type ... is implicity cast of Any?" 警告:
objects?.forEach {
val gson = Gson()
val chatObject = if(it.type == CHAT_TEXT_TYPE) gson.fromJson(it.value, ChatText::class.java) //WARNING
else gson.fromJson(it.value, ChatProduct::class.java) //WARNING
//TEST
if(chatObject is ChatText) Log.e("ChatText: It works!", chatObject.text)
if(chatObject is ChatProduct) Log.e("ChatProduct: It works!", chatObject.name)
}
但终于成功了。我的代码有什么问题吗?是否有可能删除此警告?
编辑(正如@Xavier Bouclet 所建议的那样——警告消失了)
val chatObject = when (it.type)
{
CHAT_TEXT_TYPE -> gson.fromJson(it.value, ChatText::class.java)
CHAT_PRODUCT_TYPE -> gson.fromJson(it.value, ChatProduct::class.java)
else -> gson.fromJson(it.value, Any::class.java)
}
警告告诉您您在分支中 returned 了不同的类型,并且您分配的变量将被推断为它们的第一个公共超类型,在本例中是 Any?
。这不是您通常使用 if-else
表达式的方式,您通常 return 来自两个分支的相同类型。 IDE 警告你,因为你所做的通常是偶然的。
如果您稍后要检查结果的类型以了解您正在使用的实际类型,您的代码可能没问题。
要删除警告,您可以通过注释取消警告:
@Suppress("IMPLICIT_CAST_TO_ANY")
val chatObject = ...
或明确声明if-else
表达式return的类型未知:
val chatObject: Any = ...
当我尝试做这样的事情时,我收到 "Conditional branch result of type ... is implicity cast of Any?" 警告:
objects?.forEach {
val gson = Gson()
val chatObject = if(it.type == CHAT_TEXT_TYPE) gson.fromJson(it.value, ChatText::class.java) //WARNING
else gson.fromJson(it.value, ChatProduct::class.java) //WARNING
//TEST
if(chatObject is ChatText) Log.e("ChatText: It works!", chatObject.text)
if(chatObject is ChatProduct) Log.e("ChatProduct: It works!", chatObject.name)
}
但终于成功了。我的代码有什么问题吗?是否有可能删除此警告?
编辑(正如@Xavier Bouclet 所建议的那样——警告消失了)
val chatObject = when (it.type)
{
CHAT_TEXT_TYPE -> gson.fromJson(it.value, ChatText::class.java)
CHAT_PRODUCT_TYPE -> gson.fromJson(it.value, ChatProduct::class.java)
else -> gson.fromJson(it.value, Any::class.java)
}
警告告诉您您在分支中 returned 了不同的类型,并且您分配的变量将被推断为它们的第一个公共超类型,在本例中是 Any?
。这不是您通常使用 if-else
表达式的方式,您通常 return 来自两个分支的相同类型。 IDE 警告你,因为你所做的通常是偶然的。
如果您稍后要检查结果的类型以了解您正在使用的实际类型,您的代码可能没问题。
要删除警告,您可以通过注释取消警告:
@Suppress("IMPLICIT_CAST_TO_ANY")
val chatObject = ...
或明确声明if-else
表达式return的类型未知:
val chatObject: Any = ...