java 通过反射以及MethodHandle执行泛型参数的静态方法


开发过程中遇到一个不能直接调用泛型工具类的方法,因此需要通过反射来摆脱直接依赖。

被调用静态方法示例

public class test{
    public static  T get(Class tClass){
        try {
            return test2.getData(tClass);
        } catch (Exception e){
            return null;
        }
    }
}

调用者示例

1     public static  T getData(Class tClass) {
2         try {
3             MethodType methodType = MethodType.methodType(Object.class, Class.class);
4             MethodHandle method = MethodHandles.lookup().findStatic(Class.forName("com.xxx.adapter.context.test"), "get", methodType);
5             return (T) method.invoke(tClass);
6         }catch (Throwable e){
7             return null;
8         }
9     }

一开始没搞明白如何能获取到泛型方法的方法句柄。

后来发现可以直接用 MethodType.methodType(Object.class, Class.class) 表示。。。。基础知识还是重要。