Android 安卓工作室';s";“类型”的预期资源;检查?

Android 安卓工作室';s";“类型”的预期资源;检查?,android,android-studio,lint,typechecking,Android,Android Studio,Lint,Typechecking,Android Studio Beta(0.8)有一个漂亮的新功能,它检查一些int参数不是任意整数,而是具有一些属性 例如,调用如下内容: setContentView(R.id.textView1); 将正确报告R.id.textView1不是版面id(消息为“预期版面类型资源”)。还有其他类似的案例 可以理解的是,一旦您将自己的方法添加到混合中,这种保护就会丢失,例如 private void mySetContentView(int resourceId) { setConte

Android Studio Beta(0.8)有一个漂亮的新功能,它检查一些
int
参数不是任意整数,而是具有一些属性

例如,调用如下内容:

setContentView(R.id.textView1);
将正确报告
R.id.textView1
不是版面id(消息为“预期版面类型资源”)。还有其他类似的案例

可以理解的是,一旦您将自己的方法添加到混合中,这种保护就会丢失,例如

private void mySetContentView(int resourceId) {
    setContentView(resourceId);
}
然后我可以用任意整数调用
mySetContentView()
,它不会抱怨

因此,我有两个(相关)问题:

  • 这是如何实现的——特殊检查是否“烘焙”到棉绒中
  • 有没有办法对
    mySetContentView()
    方法进行注释,以便它在使用无效值调用时也会报告资源类型错误
  • (感谢@commonware的提醒)

    在您自己的代码中有Java注释来支持这些检查。它们都可以在android.support.annotations软件包中找到:

    • IdRes
    • DrawableRes
    • LayoutRes
    • StringRes
    • &c
    例如,在这种情况下,我可以使用:

    private void mySetContentView(@LayoutRes int resourceId) {
        setContentView(resourceId);
    }
    
    androidstudio将检查提供的资源id是否确实用于布局

    此外,这些注释是导出的,因此它们在设计库时特别有用

    资料来源:

    • 谷歌I/O 2014视频:

      • 这些都是注释:

        @AnimatorRes
        @AnimRes
        @AnyRes
        @ArrayRes
        @AttrRes
        @BoolRes
        @ColorRes
        @DimenRes
        @DrawableRes
        @FractionRes
        @IdRes
        @IntDef
        @IntegerRes
        @InterpolatorRes
        @LayoutRes
        @MenuRes
        @NonNull
        @Nullable
        @PluralsRes
        @RawRes
        @StringDef
        @StringRes
        @StyleableRes
        @StyleRes
        @XmlRes
        

        所有注释,可与android.support.annotation一起使用,您可以找到


        还有关于支持注释。

        试试这个答案:它能工作。。。将此代码放入build.gradle

        android {
         lintOptions {
            disable "ResourceType"
          }
        }
        

        我很确定这是一个注释——我想他们可能已经在谷歌I | O@commonware上的开发者工具演示中介绍了这一点!你想回答这个问题,还是我自己回答?因为我不记得注释了,你最好回答它。:-)@通用软件完成了,谢谢!谢谢同样的解释。。。InputStream is=getResources().openRawResource(getResourceID(R.drawable.greenbal))。。。。private int getResourceID(@DrawableRes int resID){return resID;}我认为问题恰恰相反:即使使用了中间函数,他也希望进行这些检查。注意:禁用支票通常是个坏主意。Android开发者通常比我们聪明;)