首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加jar的方法/修改类

添加jar的方法/修改类
EN

Stack Overflow用户
提问于 2011-10-03 14:30:48
回答 3查看 3.2K关注 0票数 0

非常愚蠢的问题,我正在做一个项目,我想不出任何解决办法--我已经在一个打开的jar中实现了新的函数(让我们称之为转换器),我想修改其中的一个方法: ExchangeToEuro、ExchangeToDollar、CheckCurrency。

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

我想到了一个类装饰器,但这是行不通的,因为我需要修改jar本身。

EN

回答 3

Stack Overflow用户

发布于 2011-10-03 14:40:27

您可以在Converter.jar中扩展类,只要它们不是最终的,并且覆盖它们中包含的方法,只要它们是可见的,也不是最终的。假设Converter.jar有这样一个类:

代码语言:javascript
运行
复制
public class ExchangeToDollar {
    public BigDecimal exchangeEuroToDollar(final BigDecimal euroValue) {
        ...method implementation....
    }
}

您可以像这样扩展和覆盖:

代码语言:javascript
运行
复制
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实例。

票数 2
EN

Stack Overflow用户

发布于 2011-10-03 14:34:42

还不完全清楚您需要做什么样的修改,但是如果您需要修改类方法本身,则您的选项仅限于使用BCEL或ASM等工具进行的AspectJ或不太干净的字节代码操作。

可以想象,您可以用不同的JVM语言(如Groovy/等等)创建附加功能,编译成.class文件并使用这些功能。

不过,你可能需要提供更多和/或不太矛盾的信息。

票数 1
EN

Stack Overflow用户

发布于 2011-10-03 14:40:00

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7636421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档