反射引发的血案

作者: zcwfeng | 来源:发表于2020-03-20 10:38 被阅读0次

贴一段代码 Support 版本导致的

private void updateNestedScrollingChild(V child) throws Exception {
    Field ref =         BottomSheetBehavior.class.getDeclaredField("nestedScrollingChildRef");
    ref.setAccessible(true);
    ref.set(this, new WeakReference<>(findScrollingChild(child)));
  }

/**
 * 重置可滚动的child,如果根view中方的是viewpager,page切换时必须调用此方法
 */
public void invalidateScrollingChild() {
    try {
        Field ref = BottomSheetBehavior.class.getDeclaredField("viewRef");
        ref.setAccessible(true);
        WeakReference<View> viewRef = (WeakReference<View>) ref.get(this);
        final View scrollingChild = findScrollingChild(viewRef.get());
        updateNestedScrollingChild((V) scrollingChild);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

由于风格习惯,猜测,一般成员变量最老的程序员习惯比较好。mXXXX
但是后来可能是风格问题,改成xxxx。所以反射找不到字段。不容易注意
我的代码,不一定对,具体针对Support版本看,具体的要兼容适配吧
希望给大家类似问题bug解决有帮助

PS: 终于理解大神说反射是个双刃剑

相关文章

网友评论

    本文标题:反射引发的血案

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