@IdRes的Android注释工作

Rah*_*hul 15 java android

我正在使用课堂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)

Nab*_*ari 6

这只是一个Lint 警告,因为该方法期望变量来自R.id类。

对于从方法返回的值的情况,Lint不必费心检查整个函数是返回硬编码整数还是实际ID。

从@IdRes的文档中可以得出:

表示整数参数,字段或方法的返回值应为id资源引用(例如android.R.id.copy)。

注释也仅存在于文档的源代码中。编译代码后,注释将被删除。