実用的な反射類ツールソース分析---SpringSideのツール類
1598 ワード
SpringSideのツールクラス.
pk: org.springside.core.utils
pk: org.springside.core.utils
public class GenericsUtils
/**
* , Class . public BookManager extends GenricManager<Book>
*
* @param clazz clazz The class to introspect
* @param index the Index of the generic ddeclaration,start from 0.
* @return the index generic declaration, or <code>Object.class</code> if cannot be determined
*/
public static Class getSuperClassGenricType(Class clazz, int index) {
// clazz
Type genType = clazz.getGenericSuperclass();
// ParameterizedType , , Object.class
//** jdk1.5 。
if (!(genType instanceof ParameterizedType)) {
log.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
return Object.class;
}
// Type , Class
// UserAction extends StrutsSecurityAction<User, UserManager> User UserManager
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];
}