扩展私有内部 classes:使用反射 hack 还是 copy/paste 基础 class 更好?

Extending private inner classes: Is it better to use reflection hacks or copy/paste the base class?

一个开源库有一个抽象 Java class 我正在扩展名为 AbstractDialog。它有一个私有内部 class A 和一个在构造函数中实例化的私有成员 A a 。不幸的是,我需要自定义 A.

中实现的行为

我是否应该使用反射将 a 成员变量设置为我自己的实现?或者将 AbstractDialog 的源代码复制到我的项目中并使 Aa 受保护?


一般的答案是最好的,但在我的具体情况下,我想为我正在开发的 Eclipse 插件覆盖 ContentProvider in the abstract class FilteredItemsSelectionDialog 的行为。

如果 A 是私有的,则它不打算供外部使用,因此可能无法保证以相同的方式工作,甚至无法保证将来存在。所以反射黑客已经出局了。复制它,并控制实施。如果它有分歧,很好。如果您控制了框架,我会重构以使 A 普遍可用,但由于您不控制,您没有太多选择。