import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.invoke.VarHandle; class SignaturePolymorphic { public static void main(String... args) throws Throwable { // signature polymorphic methods allow any lookup, do not warn MethodHandles.lookup().findVirtual(MethodHandle.class, "invoke", MethodType.methodType(int.class, String.class, double.class)); MethodHandles.lookup().findVirtual(VarHandle.class, "compareAndSet", MethodType.methodType(int.class, String.class, double.class)); // static lookup still warns as the methods are virtual MethodHandles.lookup().findStatic(MethodHandle.class, "invoke", MethodType.methodType(int.class, String.class, double.class)); MethodHandles.lookup().findStatic(VarHandle.class, "compareAndSet", MethodType.methodType(int.class, String.class, double.class)); // unrelated methods in the relevant classes cause warnings MethodHandles.lookup().findVirtual(MethodHandle.class, "toString", MethodType.methodType(int.class, String.class, double.class)); MethodHandles.lookup().findVirtual(VarHandle.class, "toString", MethodType.methodType(int.class, String.class, double.class)); } }