springside提供的一个GenericsUtils的泛型工具类,不知道对已高并发的系统,用他来转换效率如何,有替代方案吗?
我的Struts2 Action 类必须继承GenericAction(自写),强制泛型传入,
如下
public class UserAction extends GenericAction<UserForm> {
  页面获取 current即可
}T current = (Class<T>) GenericsUtils.getSuperClassGenricType(getClass()).newInstance();public class GenericsUtils {

private static final Logger log = Logger.getLogger(GenericsUtils.class); private GenericsUtils() {
} /**
 * 通过反射,获得定义Class时声明的父类的范型参数的类型.
 *
 * @param clazz The class to introspect
 * @return the first generic declaration, or <code>Object.class</code> if cannot be determined
 */
@SuppressWarnings("unchecked")
public static Class getSuperClassGenricType(Class clazz) {
return getSuperClassGenricType(clazz, 0);
} /**
 * 通过反射,获得定义Class时声明的父类的范型参数的类型,如没有找到符合要求的范型参数,则递归向上直到Object.
 * 
     * @param clazz 需要反射的类,该类必须继承范型父类.
     * @param index 泛型参数所在索引,从0开始.
     * @return 范型参数的实际类型,如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回.
 */
@SuppressWarnings("unchecked")
public static Class getSuperClassGenricType(Class clazz, int index) { Type genType = clazz.getGenericSuperclass(); if (!(genType instanceof ParameterizedType)) {
log.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
return Object.class;
} Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); if (index >= params.length || index < 0) {
log.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
+ params.length);
return Object.class;
}
if (!(params[index] instanceof Class)) {
log.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
return Object.class;
}
return (Class) params[index];
}
}