⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericsutils.java

📁 使用WEBWORK,SPRING,HIBERNATE编写的简单的添加
💻 JAVA
字号:
/**
 *文件功能: 
 */
package com.common.util;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
 * @作者 徐建协
 * @日期 2008-1-18
 */
public class GenericsUtils {
	private static final Log log = LogFactory.getLog(GenericsUtils.class);

	private GenericsUtils() {
	}

	/**
	 * 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>
	 *
	 * @param clazz The class to introspect
	 * @return the first generic declaration, or <code>Object.class</code> if cannot be determined
	 */
	public static Class getSuperClassGenricType(Class clazz) {
		return getSuperClassGenricType(clazz, 0);
	}

	/**
	 * 通过反射,获得定义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) {
		//返回表示此 Class 所表示的实体的直接超类的 Type,也就是extends的类。不包含implements的    
        //Type是Class的父类    
        Type genType = clazz.getGenericSuperclass();    
   
        if (!(genType instanceof ParameterizedType)) {    
            log.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");    
            return Object.class;    
        }    
        //返回表示此类型实际类型参数的 Type 对象的数组,数组里放的都是对应类型的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];    
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -