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
}