gpt4 book ai didi

java - MethodHandles.filterArguments() 示例给出了异常

转载 作者:行者123 更新时间:2023-12-01 09:49:29 27 4
gpt4 key购买 nike

使用 Java 1.8.0_92,尝试运行 MethodHandles 的示例。 filterArguments() ,抛出以下异常:

Exception in thread "main" java.lang.invoke.WrongMethodTypeException: expected (String,String)String but found (String,String)Object
at java.lang.invoke.Invokers.newWrongMethodTypeException(Invokers.java:298)
at java.lang.invoke.Invokers.checkExactType(Invokers.java:309)
at SomeTest.main(SomeTest.java:15)

代码是:

import static java.lang.invoke.MethodHandles.filterArguments;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;

import java.lang.invoke.MethodHandle;

public class SomeTest {

public static void main(String[] args) throws Throwable {
MethodHandle cat = lookup().findVirtual(String.class,
"concat", methodType(String.class, String.class));
MethodHandle upcase = lookup().findVirtual(String.class,
"toUpperCase", methodType(String.class));
System.out.println(cat.invokeExact("x", "y"));
MethodHandle f0 = filterArguments(cat, 0, upcase);
System.out.println(f0.invokeExact("x", "y")); // Xy
MethodHandle f1 = filterArguments(cat, 1, upcase);
System.out.println(f1.invokeExact("x", "y")); // xY
MethodHandle f2 = filterArguments(cat, 0, upcase, upcase);
System.out.println(f2.invokeExact("x", "y")); // XY
}
}

知道出了什么问题吗?

最佳答案

这里你可以使用invoke()代替invokeExact(),如果你使用invokeExact(),你应该在结果中添加强制转换类型,如 (String) invokeExact()

关于java - MethodHandles.filterArguments() 示例给出了异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695422/

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