@Test public void likeReflectTest() throws Throwable { Class<MethodHandles.Lookup> 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 ,哥哥们,是啥原因呢
