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 {

    }





  • 相关阅读:
    Linux:CentOS-7配置VMware-15.5与本机IP同网段
    SpringCloud:Zuul路由配置超时问题
    SpringCloud:路由ZUUL的配置详解
    SpringCloud:扩展zuul配置路由访问
    给source insight添加.cc的C++文件后缀识别(转载)
    Linux下共享库嵌套依赖问题 (转载)
    Ubuntu 下编译libjingle-0.6.14 (转载)
    什么是「穷人思维」?
    谁上北大是能力说了算,不该是教育部(转载)
    Installing cmake 2.8.8 or higher on Ubuntu 12.04 (Precise Pangolin) (转载)
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/5373283.html
Copyright © 2011-2022 走看看