移动 前端 Python Android Java安全习惯养成 安全问题揭露 安全问题提醒

反射引发的血案

2020-03-20  本文已影响0人  zcwfeng

贴一段代码 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: 终于理解大神说反射是个双刃剑

上一篇 下一篇

猜你喜欢

热点阅读