我想适应String.startsWith
from (String, String)boolean
to (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.
MethodHandle
toString.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
参数?