1
13693261870
2022-09-16 762f2fb45db004618ba099aa3c0bd89dba1eb843
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()
    }
}