在以下帖子的被接受答案(Android自定义数字键盘)中,我发现了一种我不理解的语法:
$(R.id.t9_key_0).setOnClickListener(this);
美元符号前面代表什么?它是否特别与Android资源ID相关或更多地是一般Java语法?搜索引擎结果没有显示任何合适的结果。
$(R.id.t9_key_0).setOnClickListener(this);
美元符号前面代表什么?它是否特别与Android资源ID相关或更多地是一般Java语法?搜索引擎结果没有显示任何合适的结果。
这是一个方法调用,方法名为$
。在您提供的代码中,该方法定义如下:
protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
这个方法是一个帮助程序,它消除了需要强制转换findViewById()
返回类型的需求。从Android O开始不再需要,因为平台findViewById()
使用泛型来完成相同的操作。
名称$
可能受到jQuery的启发。
findViewById()
方法的每个返回类型进行强制转换。像这样的方式:TextView textView = (TextView) findViewById(R.id.textView);
This guy way
TextView textView = $(R.id.textView);
findViewById();
的类型转换。如果您不了解泛型,请阅读为什么要使用泛型。protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
所以现在他不需要进行类型转换
TextView textView = $(R.id.textView);
这个方法的解释。
@IdRes
注释了这个参数,以便 Android Studio 只允许在该参数中使用资源 id。findViewById
,它返回 View。<T extends View>
,所以你将始终在返回类型中拥有 View 对象。现在你不需要再编写通用方法了。因为 Android 本身已经更改了他的方法。请参见Android Oreo Changes for findViewById()
。
现在,findViewById() 方法的所有实例都返回 T 而不是 View。
现在,你也可以像那个人一样做,而无需进行类型转换。
TextView textView = findViewById(R.id.textView);