gpt4 book ai didi

java - 通过使用反射来破解类字段的任何设计模式

转载 作者:行者123 更新时间:2023-12-04 04:38:14 25 4
gpt4 key购买 nike

我有 3rd 方数据模型类,其中一些字段和方法是私有(private)的。我想破解这个类来包装这些私有(private)字段以供外部访问。

例如,数据模型是 defaultModel.java。我想扩展它来创建一个子类RefineddefaultModel.java,它通过使用Java反射来包装它的私有(private)字段。

有没有好的设计模式可以做到这一点?

因为我觉得只在我的子类中以某种方式反射(reflect)它不是最佳实践。

最佳答案

Are there any good design patterns do this?



不! 乱搞私有(private)领域是万恶之源,所以没有什么好办法。您可能(并且很可能会)违反类不变量和并发支持,冒与 future 版本不兼容的风险,最终会在运行时出现许多意外行为。您需要这样做的事实表明您的设计或您使用库的方式存在严重问题。

如果你问:有可能以一种可怕的方式吗?答案是肯定的。你可以做这样的事情。
// Possible but horrible:
Field field = object.getClass().getDeclaredField("privateField");
field.setAccessible(true);
oldValue = field.get(object);
field.set(object, newValue);

如果你想让事情不完全失控,只做gets,永远不要做sets。我会进一步避免扩展对象并弄乱类结构。您可以为此使用使用组合的适配器模式。

如果任何字段是最终的,您可能会遇到其他问题。看到这个现有的问题:
Changing private final fields via reflection .也可以看 How do I read a private field in Java?

但我必须强调这一点: 努力避免这种情况,让你 future 的自己快乐。 :)

关于java - 通过使用反射来破解类字段的任何设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com