我正在使用课堂setId方法View.根据这种方法
public void setId(@IdRes int id) // This will accept resource id
Run Code Online (Sandbox Code Playgroud)
当我尝试将此方法与一些硬编码int值(假设为100)一起使用时,此方法开始抛出预期的正确警告 -
actionButton.setId(100);
Run Code Online (Sandbox Code Playgroud)
类型为id的预期资源.
但是,当我将此硬编码值转换为方法并且从未定义此方法将返回时@IdRes,警告会变为静默.
private int getViewId() {
return 100;
}
Run Code Online (Sandbox Code Playgroud)
方法调用设置Id.
actionButton.setId(getViewId());
Run Code Online (Sandbox Code Playgroud)
两者都不一样.硬编码int并int从此方法返回.那么为什么在一种情况下方法抛出警告而在另一种情况下它会沉默.
为了我试过的缘故,StringRes但我在两种情况下都会收到警告.
private void setMyString(@StringRes int resourceString) {}
Run Code Online (Sandbox Code Playgroud)
以下两种情况均有警告─
setMyString(1);
setMyString(getStringId()); getStringId returns int value
Run Code Online (Sandbox Code Playgroud)
这只是一个Lint 警告,因为该方法期望变量来自R.id类。
对于从方法返回的值的情况,Lint不必费心检查整个函数是返回硬编码整数还是实际ID。
从@IdRes的文档中可以得出:
表示整数参数,字段或方法的返回值应为id资源引用(例如android.R.id.copy)。
注释也仅存在于文档的源代码中。编译代码后,注释将被删除。
| 归档时间: |
|
| 查看次数: |
2901 次 |
| 最近记录: |