作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个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/
我是一名优秀的程序员,十分优秀!