有一个实现方法A
的类doBlah
。我有一个B
类,它是A
的子类,并且有一个@Override
方法doBlah
。在B.doBlah
中执行一些简单的操作后,我调用了A.doBlah
。
A.doBlah
调用静态方法C.aStaticMethod
。
A和C是我无法修改的外部库的一部分。
我希望CC.aStaticMethod
代替A.doBlah
调用静态方法C.aStaticMethod
。使用任何设计模式/黑客都可以吗?
[编辑]
我确实有A
的源代码,我可以将它们中的文件包含到我的代码中并根据需要修改等。但是,我无法修改A
包。
答案 0 :(得分:3)
如果您无法修改A
或C
,并直接致电A
,则答案为否。
另一方面,如果您不需要直接调用A.doBlah
,则可以覆盖它的行为(假设方法不是final
),你自己的班级,并打电话给CC.aStaticMethod
。
如果你有权访问源代码,你可以做一个非常非常丑陋的黑客攻击:
在与原始包完全相同的包中创建一个类A
,并修改方法doBlah
以调用您需要的内容。
请记住,这有一些缺点,即如果A
属于外部库,则无法知道对该库的更新是否会破坏您的代码,因为您'我将运行较早版本的A
。
这基本上就是说这种方法可以迅速转变为维护噩梦。