在 Android 资源 ID 之前,美元符号的含义是什么?
在下面帖子(Android自定义数字键盘)的接受答案中,我发现了一个我不理解的语法:
$(R.id.t9_key_0).setOnClickListener(this);
前面的美元符号是什么意思?它是否与Android资源ID特别相关,或者更像是一种通用的Java语法?搜索引擎结果没有显示任何合适的结果。
在下面帖子(Android自定义数字键盘)的接受答案中,我发现了一个我不理解的语法:
$(R.id.t9_key_0).setOnClickListener(this);
前面的美元符号是什么意思?它是否与Android资源ID特别相关,或者更像是一种通用的Java语法?搜索引擎结果没有显示任何合适的结果。
这是一个方法调用,其中方法名称为 。该方法在您链接的代码中定义如下:$
protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
该方法是一个帮助程序,无需强制转换 返回类型 。从Android O开始不再需要它,因为平台findViewById()
使用泛型来做同样的事情。findViewById()
这个名字的灵感可能来自jQuery。$
早些年,我们知道我们需要强制转换每种返回类型的方法。喜欢findViewById()
常用方式
TextView textView = (TextView) findViewById(R.id.textView);
这家伙的方式
TextView textView = $(R.id.textView);
他通过他的泛型方法忽略了类型转换。
所以这个家伙使用Java泛型来忽略所有的类型转换。如果您不了解泛型,请阅读为什么使用泛型。findViewById();
protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
所以现在他不需要打字
TextView textView = $(R.id.textView);
此方法的说明。
@IdRes
对此参数进行了注释,以便 Android Studio 仅允许在此参数中使用资源 ID。findViewById
<T 扩展 View>
,因此您将始终在返回类型中具有 View 对象。现在,您无需创建泛型方法。因为Android本身已经改变了他的方法。请参阅 Android Oreo Changes for findViewById()
。
findViewById() 方法的所有实例现在都返回 T 而不是 View。
现在你也可以像那个家伙一样做同样的事情,而无需打字
TextView textView = findViewById(R.id.textView);