共计 975 个字符,预计需要花费 3 分钟才能阅读完成。
@Test
public void likeReflectTest() throws Throwable {Class lookupClass = MethodHandles.Lookup.class;
Field implLookup = lookupClass.getDeclaredField("IMPL_LOOKUP");
implLookup.setAccessible(true);
MethodHandles.Lookup lookup = (MethodHandles.Lookup)implLookup.get(null);
MethodHandle getSum = lookup
.in(Phone.class)
.findSpecial(
Phone.class,
"getSum",
methodType(int.class, int.class, int.class),
Phone.class
);
CallSite applyAsInt = LambdaMetafactory.metafactory(
lookup,
"applyAsInt",
methodType(ToIntFunction2.class),
methodType(int.class, Phone.class, int.class, int.class),
getSum,
methodType(int.class, Phone.class, int.class, int.class)
);
ToIntFunction2 string
= (ToIntFunction2) applyAsInt.getTarget().invoke();
int intResult = string.applyAsInt(new Phone(), 1, 0);
System.out.println(intResult);
}
ToIntFunction2.java 是这样的:
@FunctionalInterface
public interface ToIntFunction2 {int applyAsInt( Phone value1, int value2, int value3);
}
Phone.java 的一个方法是这样的:
int getSum(int param1, int param2) {return param1 + param2;}
最后执行出现了 ClassNotDefFound,哥哥们,是啥原因呢
正文完