実用的な反射類ツールソース分析---SpringSideのツール類

1598 ワード

SpringSideのツールクラス.
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];
	}