zoukankan      html  css  js  c++  java
  • 利用ParameterizedType获取泛型参数类型


    //利用ParameterizedType获取java泛型的参数类型

    public class Demo {
        public static void main(String[] args) {
            classTest();
            interfaceTest();
        }
        private static void classTest() {
            MySuperClass<Student, String> mySuperClass = new MySuperClass<Student, String>() {
                @Override
                public void onSuccess(Student data) {
                }
            };
            //getClass().getGenericSuperclass()返回表示此 Class 所表示的实体的直接超类的 Type
            ParameterizedType type = (ParameterizedType) mySuperClass.getClass().getGenericSuperclass();
            sysoType(type);
        }
        private static void interfaceTest() {
            MyInterface<Student, String> myInterface = new MyInterface<Student, String>() {
                @Override
                public void onSuccess(Student data) {
                }
            };
            ParameterizedType type = (ParameterizedType) myInterface.getClass().getGenericInterfaces()[0];
            sysoType(type);
        }
        private static void sysoType(ParameterizedType type) {
            /*com.bqt.generic.MySuperClass<com.bqt.generic.Student, java.lang.String>
            class sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
            class com.bqt.generic.Student
            class java.lang.Class
            class java.lang.String
            class java.lang.Class
            
            com.bqt.generic.MyInterface<com.bqt.generic.Student, java.lang.String>
            class sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
            class com.bqt.generic.Student
            class java.lang.Class
            class java.lang.String
            class java.lang.Class*/
            System.out.println(type + " " + type.getClass());
            //返回表示此类型实际类型参数的 Type 对象的数组,泛型的参数可能有多个,我们需要哪个就取哪个
            Type[] targets = type.getActualTypeArguments();
            for (int i = 0; i < targets.length; i++) {
                System.out.println(targets[i] + " " + targets[i].getClass());
            }
        }
    }

    public abstract class MySuperClass<T,V> {

        public abstract void onSuccess(T data);
    }
    public interface MyInterface<T,V> {
        void onSuccess(T data);
    }

    public class Student {

    }





  • 相关阅读:
    MySQL关键性能监控(QPS/TPS)
    Python小技巧
    Redis高可用演进(一)
    防范XSS攻击
    java引用知识
    ehcache同步原理
    ehcache监控
    SecureCRT使用技巧
    JUC整理笔记五之梳理Varhandle(下)
    JUC整理笔记四之梳理VarHandle(上)
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/5373283.html
Copyright © 2011-2022 走看看