Duplicate :
|
|
Duplicate :
|
|
Duplicate :
|
|
Relates :
|
The javadoc specification for the MethodHandleProxies.asInterfaceInstance method states: "The interface must be public. No additional access checks are performed." However, this method still accepts private/default-access/protected *nested* interfaces. Minimized test: =============== --- Test.java --- import java.lang.invoke.*; import static java.lang.invoke.MethodType.*; import static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodHandleProxies.*; public class Test { /*protected*/ /*private*/ interface PrivateIntf { void m(); } public static class C { public static void m() {} } public static void main(String argv[]) throws Throwable { MethodHandle mh = lookup().findStatic( C.class, "m", methodType(void.class)); PrivateIntf intf = asInterfaceInstance(PrivateIntf.class, mh); } } --- Test.java --- Minimized test output: ====================== $ java -showversion -verify Test java version "1.7.0-ea" Java(TM) SE Runtime Environment (build 1.7.0-ea-b145) Java HotSpot(TM) Server VM (build 21.0-b15, mixed mode)
|