我想适应String.startsWithfrom (String, String)booleanto (String[])boolean,以便它可以接受String[]参数,其中前两个参数将映射到(String, String). 因此,我写了下面的示例代码:
MethodHandle test =MethodHandles.publicLookup().findVirtual(String.class, "startsWith", MethodType.methodType(boolean.class, String.class));
String[] myArgs = {"result", "data", "sijie"};
MethodHandle adapt = test.asSpreader(String[].class, 2);
System.out.println("Adapt... "+ adapt.type().toString());
System.out.println("Compare Result: "+ adapt.invokeExact(myArgs)); //Expect to return false.
MethodHandletoString.startsWith适应boolean (String[])于最初的适应。但结果表明adapt.invokeExact失败。
Adapt... (String[])boolean
Exception in thread "main" java.lang.invoke.WrongMethodTypeException: expected (String[])boolean but found (String[])Object
at java.lang.invoke.Invokers.newWrongMethodTypeException(Invokers.java:349)
at java.lang.invoke.Invokers.checkExactType(Invokers.java:360)
at org.bytecode.generation.sample.App.main(App.java:78)
堆栈跟踪中的新(String[])对象非常令人困惑。任何人都可以就如何解决它提供一些建议吗?
谢谢
这个问题可以抽象为:如何适应一个Methodhandle只接受的(String, String)boolean,以便它可以接受(String[])boolean参数?