gpt4 book ai didi

java - 如何更改闭源类以操纵其中的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:06 28 4
gpt4 key购买 nike

我正在使用第 3 方库,并且在分析过程中发现了其中的性能错误。我可以通过反编译有问题的类并将“getFoo(Bar b)”方法更改为使用 LoadingCache 来轻松解决此问题。然后我将该文件放在我自己的源代码中的同一个包中,它会覆盖它。但是,类(class)的其余部分很好,我不想用库更新来更新它。

(我知道我正在操作的函数将来可能会发生变化,但这也是一个与其他任何事情一样多的思想练习)

我正在寻找一种无需反编译类即可执行此操作的方法,即使用 AspectJ/Javassist/其他一些字节码操纵器

例如改变这个:

public class SlowWorker{
public static Foo getFoo(Bar b){
//do long running op using b and return a Foo
}
}

到:

public class SlowWorker{
private static LoadingCache<AdviceDocument, Object> fooCache = CacheBuilder
.newBuilder()
.maximumSize(10000)
.weakKeys()
.build(new CacheLoader<Bar, Object>() {
@Override
public Object load(Bar b) throws Exception {
return getUncachedFoo(b);
}
});

public static Foo getFoo(Bar b){
return fooCache.get(b);
}

public static Foo getUncachedFoo(Bar b){
Foo result = //long running op on b
return result;
}
}

最佳答案

经过几个小时的摆弄和研究,我意识到我正在尝试做的是热交换代码。

对于好奇的人:

关于java - 如何更改闭源类以操纵其中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397278/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com