非常愚蠢的问题,我正在做一个项目,我想不出任何解决办法--我已经在一个打开的jar中实现了新的函数(让我们称之为转换器),我想修改其中的一个方法: ExchangeToEuro、ExchangeToDollar、CheckCurrency。
我的问题是:是否有任何机制可以在不修改jar (不修改jar中的类)的情况下向类中添加功能(修改这些方法,甚至向该类添加方法)?
我想到了一个类装饰器,但这是行不通的,因为我需要修改jar本身。
发布于 2011-10-03 14:40:27
您可以在Converter.jar中扩展类,只要它们不是最终的,并且覆盖它们中包含的方法,只要它们是可见的,也不是最终的。假设Converter.jar有这样一个类:
public class ExchangeToDollar {
public BigDecimal exchangeEuroToDollar(final BigDecimal euroValue) {
...method implementation....
}
}您可以像这样扩展和覆盖:
public class MyClass extends ExchangeToDollar {
@Override
public BigDecimal exchangeEuroToDollar(final BigDecimal euroValue) {
...your implementation....
}
}MyClass.exchangeEuroToDollar(BigDecimal)方法覆盖Converter.jar中ExchangeToDollar类中包含的exchangeEuroToDollar(BigDecimal)实现,这意味着当您在MyClass实例上调用该方法时,您的实现将被执行。
这种实现的缺点是,您无法控制的任何使用ExchangeToDollar的代码都将无法使用覆盖的实现,除非您可以传递一个MyClass实例。
发布于 2011-10-03 14:34:42
还不完全清楚您需要做什么样的修改,但是如果您需要修改类方法本身,则您的选项仅限于使用BCEL或ASM等工具进行的AspectJ或不太干净的字节代码操作。
可以想象,您可以用不同的JVM语言(如Groovy/等等)创建附加功能,编译成.class文件并使用这些功能。
不过,你可能需要提供更多和/或不太矛盾的信息。
发布于 2011-10-03 14:40:00
扩展类,添加所需的新功能,并覆盖应该更改的功能。
https://stackoverflow.com/questions/7636421
复制相似问题