当前位置:编程学习 > JAVA >>

java获取泛型类型

Java获取泛型类型方法:
 
 
通常获取泛型的类型名称,然后组装,再根据这个名称从spring容器拿到一个Bean;比如
 
[java] 
@Service("baseService")  
public class BaseService<T>  implements BaseMapper<T>{  
    private String mapper;  
    @Override  
    public int insert(T t) {  
        BaseMapper<T> baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(t.getClass().getSimpleName().toLowerCase()+"Mapper");  
        return baseMapper.insert(t);  
    }  
}  
像上面的T一样,可以拿到T的类型值为 User
即 t.getClass().getSimpleName().toLowerCase()+"Mapper" 的结果为【userMapper】
 
但是delete方法的时候,这种方式却是不行的
 
[java]  
<pre name="code" class="java">  @Override  
    public int deleteById(int id) {  
        T t = null;  
        BaseMapper<T> baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(t.getClass().getSimpleName().toLowerCase()+"Mapper");  
        return baseMapper.deleteById(id);  
    }</pre>  
这样写会抛异常,因为t是为nul
 
我们可以这些写
 
[java]  
@Override  
    public int update(T t) {  
        Type type = getClass().getGenericSuperclass();  
        Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];  
        Class<T> entityClass=(Class<T>) trueType;  
        System.out.println(type);  
        System.out.println(trueType);  
        System.out.println(entityClass.getSimpleName());  
          
        BaseMapper<T> baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(entityClass.getSimpleName().toLowerCase()+"Mapper");  
        return baseMapper.update(t);  
    }  
 
控制台打印的结果为:
[java]  
com.zte.framework.jdbc.BaseService<com.zte.user.domain.User>  
class com.zte.user.domain.User  
User  
这样就拿到了泛型T的类型了;值为【User】
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,