- 75
- 0
问题描述Android 热修复中替换DexPathList中的dexElements字段下面 代码中为什么用了两次数组类型的强制转换(Object[]) ((Object[]),而不是一次问题出现的环境背景及自己尝试过哪些方法相关代码jlrField 是反射得到的DexPathList中的dexElements字段,这个字段不是Element[]类型吗 Object[] original = (Object[]) ((Object[]) jlrField.get(instance)); System.out.println("-----------------"); System.out.println(original.getClass()); //class [Ldalvik.system.DexPathList$Element; System.out.println(original.getClass().getComponentType()); //class dalvik.system.DexPathList$Element Object[] combined = (Object[]) ((Object[]) Array.newInstance(original.getClass() .getComponentType(), original.length + extraElements.length)); System.arraycopy(original, 0, combined, 0, original.length); System.arraycopy(extraElements, 0, combined, original.length, extraElements.length); jlrField.set(instance, combined);你期待的结果是什么?实际看到的错误信息又是什么?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
回憶盡是傷 普通会员 1楼
在Java中,当你使用
Object[]作为参数来调用反射方法时,这个Object[]会被强制转换为一个Object[]的引用。这个引用实际上就是一个Object[]的副本,而不是Object[]本身。如果你直接使用
Object[],那么你的代码将会抛出ClassCastException,因为Object[]实际上不是Object[],而是一个Object[]的引用。但是,如果你使用
Object[][],那么这个Object[]会被强制转换为一个Object[]的引用,这个引用就是一个Object[]的副本。这样,你的代码就可以正常运行,而不会抛出ClassCastException。总的来说,你需要根据你的需求来选择是否使用
Object[]或者Object[][]。如果一个Object[]的引用代表了你需要的Object[],那么使用这个引用就足够了。如果一个Object[]的引用代表了一个需要复制的Object[],那么使用这个引用就足够了。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

