美文网首页
批量解决Casting 'findViewById(R.

批量解决Casting 'findViewById(R.

作者: 老卫 | 来源:发表于2018-05-17 10:21 被阅读149次

    在Android Studio 中build.gradle(Module:app) 如果compileSdkVersion >=26,进行findViewById操作会报 Casting 'findViewById(R.id.X)' to 'X' is redundant This inspection reports unnecessary cast expressions.

    1.jpg

    大意为findViewById前的强制类型转换是多余的。

            mRvMsg = (RecyclerView)findViewById(R.id.rv_msg);
            mEtPort = (EditText) findViewById(R.id.et_port);
    

    产生上边的原因为,在compileSdkVersion >=26后,findViewById内部源码:

        @Nullable
        public <T extends View> T findViewById(@IdRes int id) {
            return getWindow().findViewById(id);
        }
    

    返回值为范型T,且T extends View,因此不用向下强制类型转换。
    而compileSdkVersion < 26,其内部源码:

      public View findViewById(int id) {
            throw new RuntimeException("Stub!");
        }
    

    返回值类型为 View,是RecyclerView、EditText等控件的父类,所以必须进行向下的强制类型转换。

    如果是新项目,个别几处手动去掉即可,对于更变编译版本的旧项目,且使用了大量的findViewById(没有使用ButterKnife),这时就需要进行批量删除,操作如下:
    将鼠标点击到警告的位置,然后按Alt+Enter,弹出修改方法

    2.jpg
    依次选择Cleanup code-Cleanup code on ...进入Specify Inspection Scope
    ,选择Whole project后确认即可去除项目中全部强制类型转换。
    3.jpg

    相关文章

      网友评论

          本文标题:批量解决Casting 'findViewById(R.

          本文链接:https://www.haomeiwen.com/subject/xkzvdftx.html