添加方法/修改jar的类

时间:2011-10-03 14:30:48

标签: java jar

非常愚蠢的问题,我正在做一个项目,我无法考虑任何解决方法 我在 open jar中实现了新功能(我们称之为转换器),我想修改其中一种方法:ExchangeToEuro,ExchangeToDollar,CheckCurrency。

我的问题是:是否有任何机制可以在不修改jar的情况下向类添加功能(修改这些方法或甚至向这个类添加方法)(不修改jar中存在的类)? / p>

我想过一个类装饰器,但这不会起作用,因为我需要修改jar本身。

3 个答案:

答案 0 :(得分:2)

您可以在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中exchangeEuroToDollar(BigDecimal)类中包含的ExchangeToDollar实现,这意味着当您在MyClass的实例上调用该方法时,你的实施将被执行。

此类实现的缺点是,任何使用ExchangeToDollar无法控制的代码都无法使用被覆盖的实现,除非您可以传递MyClass实例代替。

答案 1 :(得分:1)

您需要做出哪些修改并不完全清楚,但是如果您需要自己修改类方法,那么您的选项仅限于使用AspectJ或使用BCEL或ASM等工具的不太简洁的字节代码操作形式。

您可以想象使用不同的JVM语言(如Groovy / etc)创建其他功能,编译为.class文件,然后使用它们。

但是,您可能需要提供更多和/或更少矛盾的信息。

答案 2 :(得分:1)

扩展类,添加所需的新功能,并覆盖应更改的内容。