java – ‘Swizzle'(也许是反射?)addView()在Android上
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – ‘Swizzle'(也许是反射?)addView()在Android上,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1375字,纯文字阅读大概需要2分钟。
内容图文
![java – ‘Swizzle](/upload/InfoBanner/zyjiaocheng/787/50df9724ce01446b86ea293b0f733b40.jpg)
我知道你实际上不能用Java进行Swizzle.
我正在做一些研究,我想’也许’你可以用Java做反射来完成类似Swizzle的行为(你可以在iOS上做).
罪魁祸首(以及我见过的最糟糕的设计决策之一)是所有Android ViewGroup对象上的addView()函数.您必须显式检查父项是否为空(有时甚至需要强制转换父项以获取所需的行为!).毛.
我想通过让addView()方法自动执行此检查来更改此行为(不创建一百万个子类),以便客户端代码可以忽略它.
这是我可以用Reflection做的事情(从我掌握它需要特殊的运行时调用,而不是实际更改根方法调用[所以可能不够好]),或其他什么?还是我在错误的树上吠叫?
解决方法:
正如您所提到的,如果不创建一百万个子类(或者更好的put,每个类的一个子类,您希望覆盖addView实现),这似乎是不可能的.这实际上是正确的方法,也意味着您可以在XML布局文件中使用这些子类.
反射将允许您在运行时检查类/接口/字段/方法,但它不允许您更改已编译的基础实现提供的已定义行为.虽然可以进行一些更改,例如可以访问私有方法/字段.
灰色区域选项传入……
值得研究的一个方向是Mockito,它允许您在现有对象实例周围创建间谍,以允许您覆盖默认实现.这是通过Java的proxies和InvocationHandlers实现的.但是,此时我会停下来说你的生产代码不应包含任何测试代码,而Mockito显然是为此而设.考虑到这一点,至少在过去,过去很难(如果不是不可能的话)将代理放在Android的某些类(如Views和Contexts)上.我相信这已经在DexMaker解决了,我对自己知之甚少,但它确实允许你执行运行时代码生成.这将是另一个值得关注的方向.我个人认为这些都不应该被视为值得制作代码的可能解决方案,而是为了你自己的好奇心和学习而有所作为.
内容总结
以上是互联网集市为您收集整理的java – ‘Swizzle'(也许是反射?)addView()在Android上全部内容,希望文章能够帮你解决java – ‘Swizzle'(也许是反射?)addView()在Android上所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。