【发布时间】:2012-01-30 09:04:48
【问题描述】:
我想在类方法之间插入以动态扩展对象。
我已经知道 java.lang.reflect.Proxy 的东西,但是它太有限了,无法进行真正的插入。
来自Using java.lang.reflect.Proxy to Interpose on Java Class Methods,第一个限制是:
(...) 必须通过代理类的实例调用该方法。因此,例如,嵌套的方法调用不会被拦截。
还有最糟糕的:
(...) 该方法必须已在由被代理的对象实现的接口中定义。不能通过没有实现接口的类的实例来调用。
我想在运行时扩展的对象没有实现任何接口,最糟糕的是,我需要覆盖的方法是嵌套的和私有的。
我知道这在 Python 和 C 中相当容易,上面引用的文章说这是可能的:
本系列的下一篇文章将说明一些克服这些限制的技术。
很遗憾,我找不到这篇文章。
【问题讨论】:
-
那篇文章是 2001 年的。它是 11 岁。您可能想尝试找到一些不那么史前的东西来作为您实验的基础。
-
这种更改通常被认为是非常糟糕的编程实践。它可能导致无法维护和无法支持的代码。您的建议通常有更好的完成方式。我怀疑您对某个问题有特定的解决方案。您会考虑针对同一问题的其他解决方案吗?
-
有时,黑客是唯一的方法。如果您对(长)故事感兴趣,请给我发 PM =)
标签: java reflection interposing