gpt4 book ai didi

java - 字节码操作能否在运行时更改 Java 方法的返回类型?

转载 作者:行者123 更新时间:2023-11-30 04:36:31 27 4
gpt4 key购买 nike

我想知道是否可以通过字节码操作来做这样的事情:

public class Foo {
public int getBlah() {
return 1;
}
}

public void hi(int x) {
System.out.println("hi: " + x);
}

public void hi(String x) {
System.out.println("wow: " + x);
}

现在我想打电话:

hi(foo.getBlah());

并调用 String 参数的重载 hi 方法。

最佳答案

你能处理 hi(int x) 上的标记值吗?如果是的话,你可以这样做:

public void hi(int x) {
if (x == Integer.MIN_VALUE) {
String newParam = getTheParamFromProxySomehow();
hi(newParam);
return;
}
System.out.println("hi: " + x);
}

基本上是:

  • 通过代理拦截 getBlah() 方法
  • 保存(在 ThreadLocal 中?)您想要传递给重载的 hi 方法的任何字符串参数
  • 返回标记值,例如 0-1Integer.MIN_VALUE
  • 执行上面的技巧

这有点 hacky,当您没有基元时它看起来最好,因此您可以使用 null 作为标记值。希望有人有更好的答案。 :)

关于java - 字节码操作能否在运行时更改 Java 方法的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392692/

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