zoukankan      html  css  js  c++  java
  • Class<T> 泛型获取T的class

    getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type
    然后将其转换ParameterizedType。
    getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。
    [0]就是这个数组中第一个了。
    简而言之就是获得超类的泛型参数的实际类型。

    public class GenericDAO<T> {
    	private Class<T> entityClass;
    	protected GenericDAO() {
    		Type type = getClass().getGenericSuperclass();
    		Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
    		this.entityClass = (Class<T>) trueType;
    	}
    }
    

    子类

    public class OptionManager extends GenericDAO<MSGC_OPTION> {
    }
    

    测试类

    public class OracleTest {
    	public static void main(String[] args) throws Exception {
    		OptionManager manager = new OptionManager();
    	}
    }
    

    这样在你new OptionManager();以后超类里的entityClass就是子类那里的public class OptionManager extends GenericDAO<MSGC_OPTION> 里面的MSGC_OPTION所对应的class对象了..

      

  • 相关阅读:
    Laravel
    Laravel
    Laravel
    Http状态信息
    BeautifuSoup的使用
    js中select标签中的option选择
    正则表达式
    利用vi编辑器创建和编辑正文文件(二)
    利用vi编辑器创建和编辑正文文件(一)
    认证、权限与频率组件
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/11246354.html
Copyright © 2011-2022 走看看