gpt4 book ai didi

android - Kotlin Android : How to pass ArrayList of Serializable objects through intent without unchecked cast warning?

转载 作者:行者123 更新时间:2023-11-29 16:34:37 32 4
gpt4 key购买 nike

我正在创建一个Intent像这样:

public void showThings(ArrayList<Thing> things) {
Intent intent = new Intent(this, ThingActivity.class);
intent.putExtra(THINGS, things);
startActivity(intent);
}

然后在 ThingActivity我想要ArrayList<Thing>

class ThingActivity {
var things: ArrayList<Thing>? = null

override fun onCreate(savedInstanceState: Bundle?) {
things = intent.extras.getSerializable(OtherActivity.THINGS) as? ArrayList<Thing>
}

不幸的是,我似乎无法弄清楚如何在不触发“未经检查的转换”警告的情况下转换为适当的类型。有没有办法优雅地设置为 null如果(不知何故)强制转换失败?

正在追加?: return null似乎不像我在其他地方看到的那样工作

最佳答案

由于 Java 泛型在运行时的工作方式,会发生未经检查的强制转换警告。由于类型删除,在运行时,列表的类型只是 List ,而不是List<Thing> 。这意味着强制转换被认为是不安全的,尽管人们很可能查看代码并发现没有问题。

虽然我同意您的观点,即抑制警告并不理想,但在这种情况下我认为这样就可以了。

不过,最好的解决方案是实现 Parcelable接口(interface)位于 Thing 。这样,当你想传递 List<Thing> 时通过 Intent ,你可以写:

intent.putParcelableArrayListExtra(THINGS, things)

当你想读回它时:

things = intent.extras.getParcelableArrayListExtra(OtherActivity.THINGS)

这些都不会导致编译器警告。

关于android - Kotlin Android : How to pass ArrayList of Serializable objects through intent without unchecked cast warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783540/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com