提问者:小点点

如何将msg. obj转换为相应的对象并且编译器不发出警告?[重复]


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>

如何修复此警告?


共2个答案

匿名用户

静态编程语言具有智能强制转换。但是泛型在运行时被擦除。因此您永远不知道列表内容的类型。只需将其转换为MutableList即可

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

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

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

匿名用户

你能改变if语句吗:

如果(msg. arg1==AsyncActionCallback.RESULT_OK

从MutableList

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

相关问题