作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有“类型的条件分支结果...是 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)
}
最佳答案
警告告诉您,您在分支中返回了不同的类型,并且您分配的变量将被推断为它们的第一个公共(public)父类(super class)型,在本例中为Any?
。这不是您通常使用 if-else 表达式的方式,您通常从两个分支返回相同的类型。 IDE 警告您,因为您所做的事情通常是意外的。
如果您稍后要检查结果的类型以了解您正在使用的实际类型,那么您的代码可能没问题。
要删除警告,您可以使用注释抑制警告:
@Suppress("IMPLICIT_CAST_TO_ANY")
val chatObject = ...
或者明确声明 if-else
表达式返回的类型未知:
val chatObject: Any = ...
关于Kotlin 警告 : Conditional branch result of type . .. 隐式转换为 Any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264517/
我是一名优秀的程序员,十分优秀!