【问题标题】:Casting result of findViewById is redundant [duplicate]findViewById 的转换结果是多余的[重复]
【发布时间】:2017-10-27 14:56:48
【问题描述】:

我是 Android 新手,我正在做一些关于使用各种视图的练习。一个这样的例子是:

    TextView messageView = (TextView) findViewById(R.id.message);

我的问题是:转换 TextView 有什么好处?我的 IDE 告诉我强制转换方法是多余的。有没有我想以这种方式投射的用例?

【问题讨论】:

  • 你使用的是哪个 android-studio 版本
  • 之所以会得到这个是因为findViewById返回View,而这个类已经定义了setOnClickListener方法。这意味着即使不进行强制转换,您也可以设置侦听器。因此,您的演员阵容是多余的。

标签: android casting textview


【解决方案1】:

在 API 级别 26 之前,方法 findViewById 返回了 View 类的引用。所以你需要投射它。

//old signature
public View findViewById(int id){
    //
}

但从 API 级别 26 开始,它已经更新,它使用模板返回 View 的子类,这样您就可以分配返回的引用而无需强制转换。

//new signature
public <T extends View > T findViewById(int id){
    //
}

您提到的示例在构建项目时使用了较旧的 API 级别,因此您可以在那里看到转换。以前是强制的,现在没必要了。所以你收到了警告。

【讨论】:

  • 它与构建工具版本无关,而是compileSdkVersion of 26
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2010-11-17
  • 1970-01-01
  • 2015-02-19
  • 2012-02-28
  • 2015-05-15
相关资源
最近更新 更多