Java_Reflect_1

獲取運行時帶泛型父類的參數類型:this

帶泛型父類:spa

public class BaseDao<T>
{
    private Class<T> entityClass;對象

    @SuppressWarnings("unchecked")
    public BaseDao()
    {
        Type superClass = this.getClass().getGenericSuperclass();
        if (!(superClass instanceof ParameterizedType))
        {
            return;
        }
        ParameterizedType pType = (ParameterizedType) superClass;
        Type[] types = pType.getActualTypeArguments();
        if (types != null && types.length > 0)
        {
            entityClass = (Class<T>) types[0];
        }
    }ci

    public Class<T> getEntityClass()
    {
        return entityClass;
    }
}get

子類:it

public class AccountDao1 extends BaseDao<Account>
{io

    public static void main(String[] args)
    {
        AccountDao1 accountDao1 = new AccountDao1();
        Class class1 = accountDao1.getEntityClass();
        System.out.println(class1.getName());
    }
}table

輸出:class

reflect.Account

若是要獲取本類中泛型的實例,須要在建立本類對象時同時初始化泛型的實際類型泛型

例如:在有參構造器中將泛型做爲參數傳入。

public class AccountDao<T extends Account>
{
    private Class<T> entityClass;

    public AccountDao(Class<T> entityClass)
    {
        super();
        this.entityClass = entityClass;
    }

    public Class<T> getEntityClass1()
    {
        return entityClass;
    }

    public T getInstance()     {         if (entityClass != null)         {             try             {                 return entityClass.newInstance();             } catch (InstantiationException e)             {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (IllegalAccessException e)             {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }         return null;     } }

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息