zoukankan      html  css  js  c++  java
  • 父类如何获取子类传递的泛型

    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;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    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];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    package com.reflect.other;
    /**
     * 子类
     * @author edgewalk
     * @date  2017年6月5日
     */
    public class Student extends Parent<Person> {
        /**
         * 当我们创建本类对象的时候,会先创建一个student类的空参构造,
         * 然后会返回父类的空参构造(Parent),此时父类就会获取到子类传递给他的泛型,在父类中执行相关操作
         */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    满载一船星辉,在星辉斑斓里放歌
  • 相关阅读:
    WordCount
    vs2013安装及测试
    阅读程序,回答问题
    补作业:随机生成二元四则运算
    第一次合作
    漫漫“码农”路
    我的进度条
    Believe
    软件工程个人总结
    结队作业——电梯调度程序
  • 原文地址:https://www.cnblogs.com/edgedance/p/6979578.html
Copyright © 2011-2022 走看看