父类如何获取子类传递的泛型

来源:互联网 发布:派派辅助软件 编辑:程序博客网 时间:2024/05/09 04:19
package com.reflect.other;import java.io.Serializable;/** * 简单pojo类(测试用,无具体意义) *  * @author edgewalk * @date 2017年6月5日 */public class Person implements Serializable {    private static final long serialVersionUID = 1L;    private Integer id;    private String name;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
package com.reflect.other;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;/** * 父类 *  * @author edgewalk * @date 2017年6月5日 * @param <T>泛型,可以由之类继承传递 */public class Parent<T> {    /**     * 用于接收传递的clazz     */    private Class clazz;    // 获取子类传递给他的具体泛型类型    public Parent() {        // 1获取子类的class(在创建子类对象的时候,会返回父类的构造方法)        Class<? extends Parent> clazz = this.getClass(); // Student        // 2获取当前类的带有泛型的父类类型        ParameterizedType type = (ParameterizedType) clazz.getGenericSuperclass();        // 3返回实际参数类型(泛型可以写多个)        Type[] types = type.getActualTypeArguments();        // 4 获取第一个参数(泛型的具体类) Person.class        clazz = (Class) types[0];    }}
package com.reflect.other;/** * 子类 * @author edgewalk * @date  2017年6月5日 */public class Student extends Parent<Person> {    /**     * 当我们创建本类对象的时候,会先创建一个student类的空参构造,     * 然后会返回父类的空参构造(Parent),此时父类就会获取到子类传递给他的泛型,在父类中执行相关操作     */}
原创粉丝点击