tomcat中exec引起的权限问题
在做解析excel的时候,想通过泛型把解析和转java bean的过程封装起来,后面发现java里面只能获取到父类的泛型Class。这样的话,就意味着如果获取泛型Class来实例化bean对象,那么每出现一种excel模板就需要定义一个空实现,把具体的bean Class通过泛型传过去。最后决定增加一个Class<?>参数来传递bean Class。这里记录一下Java获取泛型的Class对象的demo和注意事项。
一、获取泛型Class的方法
public Type getGenericSuperclass()
ParameterizedType
声明。如果此Class 表示Object 类、接口、基本类型或
void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。ParameterizedType类的方法:
Type[] getActualTypeArguments()
方法作用:二、获取泛型Class对象
(解析Excel的类代码较多,这里定义几个简单的类记录)
定义获取泛型Class对象的工具类GenericSuperclassUtil
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericSuperclassUtil {
/*
* 获取泛型类Class对象,不是泛型类则返回null
*/
public static Class<?> getActualTypeArgument(Class<?> clazz) {
Class<?> entitiClass = null;
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass)
.getActualTypeArguments();
if (actualTypeArguments != null && actualTypeArguments.length > 0) {
entitiClass = (Class<?>) actualTypeArguments[0];
}
}
return entitiClass;
}
}
BaseService<E>
public class BaseService<E> {
public Class<?> getEntityClass() {
return GenericSuperclassUtil.getActualTypeArgument(this.getClass());
}
}
@Test
public void testBaseService() {
System.out.println(new BaseService<User>().getEntityClass());// 控制台输出:null
}
定义UserService,用来测试使用父类时泛型Class的获取
UserService,继承BaseService<E>
public class UserService extends BaseService<User> {
}
class User {
}
测试UserService.getEntityClass()
@Test
public void testUserService() {
System.out.println(new UserService().getEntityClass());// 控制台输出:class User
}