findViewById为什么不用强转了。

2020-07-10  本文已影响0人  小马要加油

前言

工作时有个需求,把往Android28里面跑的代码放到android 25上去跑,结果编译就gg了/


image.png

在开发android 28 时,用sonar检测一个一个把强转类型给删的,现在又要我一个一个加回来,为什么!!!

对啊 为什么呢。

原因

其实去高版本sdk上看,会发现

    @Nullable
    public final <T extends View> T findViewById(@IdRes int id) {
        if (id == NO_ID) {
            return null;
        }
        return findViewTraversal(id);
    }

   protected <T extends View> T findViewTraversal(@IdRes int id) {
        if (id == mID) {
            return (T) this;
        }
        return null;
    }

而在sdk 25的版本上代码没有这个泛型,这也就是为什么要强转啦。 那是不是我把sdk25的find同步成高版本的实现我就不用在代码上改了呢!哈哈哈~


    /**
     * Look for a child view with the given id.  If this view has the given
     * id, return this view.
     *
     * @param id The id to search for.
     * @return The view that has the given id in the hierarchy or null
     */
    @Nullable
    public final View findViewById(@IdRes int id) {
        if (id < 0) {
            return null;
        }
        return findViewTraversal(id);
    }
    /**
     * {@hide}
     * @param id the id of the view to be found
     * @return the view of the specified id, null if cannot be found
     */
    protected View findViewTraversal(@IdRes int id) {
        if (id == mID) {
            return this;
        }
        return null;
    }
上一篇下一篇

猜你喜欢

热点阅读