一个开源库有一个我正在扩展的抽象 Java 类,称为 AbstractDialog
。它有一个私有(private)内部类 A
和一个在构造函数中实例化的私有(private)成员 A a
。不幸的是,我需要自定义 A
中实现的行为。
我应该使用反射将 a
成员变量设置为我自己的实现吗?或者将 AbstractDialog
的源代码复制到我的项目中并保护 A
和 a
?
<子>
一般答案是最好的,但在我的具体情况下,我想覆盖 ContentProvider
的行为在抽象类中FilteredItemsSelectionDialog
对于我正在开发的 Eclipse 插件。
最佳答案
如果 A
是私有(private)的,则它不适合外部使用,因此可能不保证以相同的方式工作,甚至不保证将来存在。所以反射黑客已经过时了。复制它,并控制实现。如果有分歧就好了。如果你控制了框架,我会重构以使 A 普遍可用,但既然你不控制,你就没有太多选择。
关于java - 扩展私有(private)内部类: Is it better to use reflection hacks or copy/paste the base class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397247/