无需强制转换findViewById的结果?

Eri*_*hao 144 android casting findviewbyid

最近我发现AndroidStudio提醒我删除一些类转换.我记得在过去,我们必须抛出findViewById的结果,但现在没有必要.

findViewById的结果仍然是View,所以我想知道为什么我们不需要转换类?

我找不到任何提到的文件,任何人都可以找到任何文件吗?

Edu*_* B. 225

从API 26开始,findViewById使用其返回类型的推断,因此您不再需要强制转换.

旧定义:

View findViewById(int id)
Run Code Online (Sandbox Code Playgroud)

新定义:

<T extends View> T findViewById(int id)
Run Code Online (Sandbox Code Playgroud)

所以如果你的compileSdk年龄至少是26岁,那就意味着你可以利用这个:)

  • 如果我们删除演员,我们的应用程序仍然可以在较低的设备上运行,对吗? (15认同)
  • @ user1032613:是的,应用程序仍然可以在较低的设备上运行而没有任何问题. (12认同)

zer*_*der 13

根据这篇文章:

以下函数依赖于Java的泛型自动类型推断,以消除手动转换的需要:

protected <T extends View> T findViewById(@IdRes int id) {
    return (T) getRootView().findViewById(id);
}
Run Code Online (Sandbox Code Playgroud)


小智 11

在旧版本中:

AutoCompleteTextView name = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
Run Code Online (Sandbox Code Playgroud)

来自带有SDK 26的Android Studio 3.0:

AutoCompleteTextView name = findViewById(R.id.autoCompleteTextView);
Run Code Online (Sandbox Code Playgroud)

  • 这没有提供问题的答案. (14认同)