首页 > 其他 > 详细

利用ParameterizedType获取泛型参数类型

时间:2016-04-10 06:47:25      阅读:170      评论:0      收藏:0      [点我收藏+]

//利用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 + "\n" + type.getClass());
        //返回表示此类型实际类型参数的 Type 对象的数组,泛型的参数可能有多个,我们需要哪个就取哪个
        Type[] targets = type.getActualTypeArguments();
        for (int i = 0; i < targets.length; i++) {
            System.out.println(targets[i] + "\n" + 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 {

}





利用ParameterizedType获取泛型参数类型

原文:http://www.cnblogs.com/baiqiantao/p/5373283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!