在Java中,给定一个对象,是否可以覆盖其中一个方法?

时间:2009-03-10 17:16:06

标签: java reflection dependency-injection

我有一个A类的对象。我想覆盖该类的一个方法。可以这样做吗?

更具体地说,我有一个正在注入字段的对象。在我可以使用它之前,我需要覆盖其中一个方法。

我试图看看Reflection是否可以帮助解决问题。请注意,我正在尝试覆盖的方法不依赖于该类的私有变量。

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

CGLIB应该能够帮助您实现您想要做的事情。查看Enhancer class

答案 2 :(得分:3)

覆盖意味着编写新类,编译它,更改注入以使用新类,并将其与应用程序的其余部分打包在一起。当然可以做到,但我不明白你为什么要反思。

如果你想让它成为一个动态的东西,你就是在谈论面向方面的编程。

答案 3 :(得分:3)

假设您正在获得该对象,因此无法将其子类化:您可以编写代理。除了要覆盖的方法之外,在所有方法上转发。当然,没有其他对该原始对象的引用将使用该代理。特别是如果对象本身在内部调用自身的方法,那么就不会使用“重写”方法。

或者你可以使用AOP风格的黑客重写调用该方法的代码,或者修改实现类。

可能你想仔细考虑一下你的设计。