private void displayMessage(String message) {
TextView orderSummaryTextView = (TextView) findViewById(R.id.order_summary_text_view);
orderSummaryTextView.setText(message); }
对于这部分代码,根据其中一个Udacity Android教程应该是完全正确的。但是然后AS提示我(TextView),这是一个转换表达式是不必要的,当我删除它时,它不会影响代码的功能,我仍然可以在下一行setText。但是为什么?
有人可以解释为什么会这样吗?我使用AS 3.0 Canary 5,但据我所知它并没有什么不同。 任何帮助都感激不尽。我是个新手。
答案 0 :(得分:3)
自SDK 26以来不需要投射,而不是因为Android O。
因此,如果您使用SDK 26进行编译,则无论您的目标版本或最低版本是什么,都可以使用此功能。
注意:在大多数情况下 - 取决于编译器支持 - 产生的结果 视图自动转换为目标类类型。如果是目标 类类型不受约束,可能需要显式强制转换。
答案 1 :(得分:1)
由于Android O没有必要明确地转换为View
对象,因此该功能会自动为您执行此操作,有关详细信息,请查看 Google I / O 17 。
答案 2 :(得分:0)
来自docs
在大多数情况下 - 根据编译器支持 - 生成的视图会自动转换为目标类类型。
答案 3 :(得分:0)
过去是必要的,而Android API则基于Java 6(或7)。
我认为最近,他们改进了几种方法,比如findViewById(),它们具有Java 8和Generics的功能,它们允许方法的结果类型"采用"对于变量的类型,结果将分配给。
答案 4 :(得分:0)
根据Google I / O,findViewById中的强制转换已在最新的Android O中成为可选项,以协助开发人员。