0

有一个A实现方法的类doBlah。我有一个B子类A并有一个@Override方法的类doBlah。在我执行一些简单的操作后B.doBlah,我调用A.doBlah.

A.doBlah调用静态方法C.aStaticMethod

A 和 C 是我无法修改的外部库的一部分。

我想有一个静态方法CC.aStaticMethod调用来A.doBlah代替C.aStaticMethod. 使用任何设计模式/黑客可以做到这一点吗?

[编辑] 我确实有源代码A,我可以将它们中的文件包含到我的代码中,并在需要时进行修改等。但是,我不能A这样修改包。

4

1 回答 1

3

如果不能修改Aor C,A直接调用,答案是否定的。

另一方面,如果您不需要直接调用A.doBlah,则可以在您自己的类中覆盖它的行为(前提是方法不是final),并让它调用CC.aStaticMethod

如果您确实可以访问源代码,则可以进行非常非常丑陋的 hack:

A在与原始完全相同的包中创建一个类,并修改方法doBlah以调用您需要的内容。

请记住,这有很多缺点,即如果A属于外部库,您无法知道对该库的更新是否会破坏您的代码,因为您将运行旧版本的A. 这基本上是说这种方法很快就会变成维护的噩梦。

于 2013-05-17T16:35:44.283 回答