package com.landtool.lanbase.UNUSED;
|
|
import java.lang.invoke.MethodHandles;
|
import java.lang.invoke.MethodType;
|
|
public class MethodHandle {
|
@Override
|
public String toString() {
|
|
return super.toString() + "==MethodHandle";
|
}
|
|
public static void main(String[] args) throws Throwable {
|
MethodHandle handle = new MethodHandle();
|
MethodType methodType = MethodType.methodType(String.class);
|
|
MethodHandles.Lookup lookup = MethodHandles.lookup();
|
|
java.lang.invoke.MethodHandle methodHandle = lookup.findVirtual(MethodHandle.class, "toString", methodType);
|
String toString = (String) methodHandle.invokeExact(handle);
|
System.out.println(toString);// com.doctor.java7.MethodHandle@355da254==MethodHandle
|
|
// or like this:
|
java.lang.invoke.MethodHandle methodHandle2 = methodHandle.bindTo(handle);
|
String toString2 = (String) methodHandle2.invokeWithArguments();
|
System.out.println(toString2);// com.doctor.java7.MethodHandle@355da254==MethodHandle
|
|
// 得到当前Class的不同表示方法,最后一个最好。一般我们在静态上下文用SLF4J得到logger用。
|
System.out.println(MethodHandle.class);
|
System.out.println(handle.getClass());
|
System.out.println(MethodHandles.lookup().lookupClass()); // like getClass()
|
}
|
}
|