//利用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获取泛型参数类型的更多相关文章

  1. JAVA基础_反射获取泛型参数类型

    我经常会想获取参数的实际类型,在Hibernate中就利用的这一点. domain: Person.java public class Person { // 编号 private Long id; ...

  2. Gson通过借助TypeToken获取泛型参数的类型的方法

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

  3. Gson通过借助TypeToken获取泛型参数的类型的方法(转)

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

  4. java 编程基础 反射方式获取泛型的类型Fileld.getGenericType() 或Method.getGenericParameterTypes(); (ParameterizedType) ;getActualTypeArguments()

    引言 自从JDK5以后,Java Class类增加了泛型功能,从而允许使用泛型来限制Class类,例如,String.class的类型实际上是 Class 如果 Class 对应的类暂时未知,则使 C ...

  5. ParameterizedType获取java泛型参数类型

    ParameterizedType getClass().getGenericSuperclass() 返回表示此 Class 所表示的实体(类.接口.基本类型或 void)的直接超类的 Type,然 ...

  6. 利用 js 获取地址栏参数

    1.aspx页面,进行页面跳转 window.location.href = "ProviderInfo.aspx?ProviderID="+ProviderID; 2.Provi ...

  7. 获取List、Set、Map等字段的泛型参数

    测试类加单元测试方法,运行结果在注释里面: package temp; import org.junit.Test; import java.lang.reflect.Field; import ja ...

  8. java 反射和泛型-反射来获取泛型信息

    通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...

  9. 获取泛型的class 反射

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

随机推荐

  1. Mysql 索引的基础(下)

    如果需要存储大量的URL并需要根据URL进行搜索查找.如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长.正常情况下会有如下查询: SELECT id FROM url WH ...

  2. 21 Merge Two Sorted Lists(两链表归并排序Easy)

    题目意思:对两个递增链表进行归并排序 思路:没什么好说的,二路归并 /** * Definition for singly-linked list. * struct ListNode { * int ...

  3. Subversion 1.7 Eclipse integration in Ubuntu12(转载)

    原文链接:http://steveliles.github.io/subversion_1_7_eclipse_integration_in_ubuntu.html Getting Subversio ...

  4. js 鼠标双击滚动单击停止

    <!DOCTYPE html> <html> <head> <title>双击滚动代码</title> <script src=&qu ...

  5. python+flask+mongodb+whoosh实现自己的搜索引擎(一):目录

    python+flask+jieba+mongodb+whoosh实现自己的搜索引擎 一.目录 二.基于python的爬虫 三.网页去燥,URL去重 四.基于mongodb的数据存储 五.基于whoo ...

  6. WinPcap编程(前言&&学习)

    计算机网络课设要求用WinPcap写对ARP包的接收与发送. 所以学了一下WinPcap的内容. 参考的博客: http://blog.csdn.net/htttw/article/details/7 ...

  7. bzoj2067: [Poi2004]SZN

    Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一些顶点和特定数量的边构成. 每个顶点都可以连向 ...

  8. 随机数(random)

    在测试你的程序是否超时时,可以随机生成一组大数据,进行一下测试. 当然如果你考场上一道题直接读不懂不会做的时候,可以random一下,拼一下RP嘛.2333. #include<cstdio&g ...

  9. -_-#【Better Code】字符串匹配

    提高 web 应用性能之 JavaScript 性能调优

  10. 【二分】Codeforces 706B Interesting drink

    题目链接: http://codeforces.com/problemset/problem/706/B 题目大意: n (1 ≤ n ≤ 100 000)个商店卖一个东西,每个商店的价格Ai,你有m ...