Java获取泛型类型方法:
通常获取泛型的类型名称,然后组装,再根据这个名称从spring容器拿到一个Bean;比如
@Service("baseService")
public class BaseService implements BaseMapper{
private String mapper;
@Override
public int insert(T t) {
BaseMapper baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(t.getClass().getSimpleName().toLowerCase()+"Mapper");
return baseMapper.insert(t);
}
} 像上面的T一样,可以拿到T的类型值为 User
即 t.getClass().getSimpleName().toLowerCase()+"Mapper" 的结果为【userMapper】
但是delete方法的时候,这种方式却是不行的
@Override
public int deleteById(int id) {
T t = null;
BaseMapper baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(t.getClass().getSimpleName().toLowerCase()+"Mapper");
return baseMapper.deleteById(id);
}
这样写会抛异常,因为t是为nul
我们可以这些写
@Override
public int update(T t) {
Type type = getClass().getGenericSuperclass();
Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
Class entityClass=(Class) trueType;
System.out.println(type);
System.out.println(trueType);
System.out.println(entityClass.getSimpleName());
BaseMapper baseMapper= (BaseMapper) SysConfigHelper.getAppContext().getBean(entityClass.getSimpleName().toLowerCase()+"Mapper");
return baseMapper.update(t);
}
控制台打印的结果为:
com.zte.framework.jdbc.BaseService
class com.zte.user.domain.User
User
这样就拿到了泛型T的类型了;值为【User】