我正在创建一个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>
}
不幸的是,我似乎无法弄清楚如何在不触发“unchecked cast”警告的情况下转换为适当的类型。如果(以某种方式出乎意料)强制转换失败,是否有办法优雅地设置为
null
?追加
?: return null
似乎不起作用,正如我在其他地方看到的建议 最佳答案
由于Java泛型在运行时的工作方式,因此发生了未经检查的强制转换警告。由于类型擦除,在运行时,列表的类型仅为List
,而不是List<Thing>
。这意味着,即使人类很可能查看代码并看到没有问题,转换也被认为是不安全的。
虽然我同意您的观点,但抑制警告并不理想,但在这种情况下,我认为这很好。
不过,最好的解决方案是在Parcelable
上实现Thing
接口(interface)。这样,当您想通过意图传递List<Thing>
时,可以编写:
intent.putParcelableArrayListExtra(THINGS, things)
而当您想读回去时:
things = intent.extras.getParcelableArrayListExtra(OtherActivity.THINGS)
这些都不会引起编译器警告。