findViewById时不需要强制转换?

时间:2017-07-02 07:38:23

标签: java android android-studio casting

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,但据我所知它并没有什么不同。 任何帮助都感激不尽。我是个新手。

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中成为可选项,以协助开发人员。