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 ,