【问题标题】:How do I convert msg.obj into the corresponding object and the compiler does not issue a warning? [duplicate]如何将 msg.obj 转换为相应的对象并且编译器不发出警告? [复制]
【发布时间】:2018-04-18 07:16:29
【问题描述】:

MutableList 用作关键字

`when(msg?.what){
    MESSAGE_GET_LIST -> {
     if (msg.obj != null && msg.obj is MutableList<*>){
                        list = msg.obj as MutableList<BaseIncomeBean>
                        ` 

当我收到一条消息并想使用它时,我必须转换为 MutableList 用作关键字

最终构建我的项目并出现以下警告

Warning:(51, 40) Unchecked cast: Any! to MutableList<BaseIncomeBean>

如何解决此警告?

【问题讨论】:

  • 请将您要询问的代码作为代码而不是屏幕截图附上,并请尝试用更易于理解的英语提出您的问题。
  • 如果您确定列表将始终具有此类型,您可以忽略此警告。
  • List list = new MutableList(msg.obj) ;

标签: android kotlin


【解决方案1】:

Kotlin 具有智能转换。但是泛型在运行时被删除。因此,您永远不知道列表内容的类型。只需将其转换为 MutableList&lt;*&gt;:

if (msg.obj is MutableList<*>)
    list = msg.obj as MutableList<*>

但既然你设置了你的项目,你就知道,演员应该是成功的。在这种情况下,您可以告诉编译器忽略警告:

if (msg.obj is MutableList<*>)
    @Suppress("UNCHECKED_CAST")
    list = msg.obj as MutableList<BaseIncomeBean>

【讨论】:

  • 非常感谢
【解决方案2】:

你能改变 if 语句吗:

if(msg.arg1 == AsyncActionCallback.RESULT_OK && msg.obj != null && msg.obj 是 MutableListBaseIncomeBean>)

从 MutableList 到 MutableList

"*" 在 kotlin 中表示任何,在 java 中表示对象。如果返回对象引用,则必须在强制转换另一个类之前检查返回的值是否是类引用。因为返回值被标记为对象,所以可能会返回不同的类引用。 IDE 不知道这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2015-06-15
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多