调试期间调用 MethodHandle
MethodHandle invoke during debugging
我正在努力思考如何有效地使用 MethodHandles,让我失望的一件事是在调试期间尝试执行 MethodHandles。
这是一些说明我的问题的示例代码。
public class MetricianTest {
public static void main(String[] args) throws Throwable {
final MethodHandles.Lookup lookup = MethodHandles.lookup();
final MethodType mt = MethodType.methodType(String.class);
final MethodHandle mh = lookup.findVirtual(MHTestClass.class, "testMethod", mt);
System.out.println(mh.invoke(new MHTestClass()));
}
public static class MHTestClass {
public int testField = 1;
public MHTestClass() {
}
public String testMethod() {
return "method-value";
}
}
}
代码在 运行 正常时工作,但停止 IntelliJ 调试器并尝试调用 MethodHandle 会抛出 UnsupportedOperationException。查看 Javadocs,我可以看到 MethodHandles 不能被反射调用,但我不确定我是否理解为什么,或者如何在我的程序中调试 MethodHandle 调用。任何见解将不胜感激!
这还没有修复 IDEA-154967,抱歉。
解决方法是使用 invokeWithArguments.
我正在努力思考如何有效地使用 MethodHandles,让我失望的一件事是在调试期间尝试执行 MethodHandles。 这是一些说明我的问题的示例代码。
public class MetricianTest {
public static void main(String[] args) throws Throwable {
final MethodHandles.Lookup lookup = MethodHandles.lookup();
final MethodType mt = MethodType.methodType(String.class);
final MethodHandle mh = lookup.findVirtual(MHTestClass.class, "testMethod", mt);
System.out.println(mh.invoke(new MHTestClass()));
}
public static class MHTestClass {
public int testField = 1;
public MHTestClass() {
}
public String testMethod() {
return "method-value";
}
}
}
代码在 运行 正常时工作,但停止 IntelliJ 调试器并尝试调用 MethodHandle 会抛出 UnsupportedOperationException。查看 Javadocs,我可以看到 MethodHandles 不能被反射调用,但我不确定我是否理解为什么,或者如何在我的程序中调试 MethodHandle 调用。任何见解将不胜感激!
这还没有修复 IDEA-154967,抱歉。 解决方法是使用 invokeWithArguments.