您的位置:首页 > 编程语言 > Java开发

java 泛型使用和反射

2016-12-27 10:32 423 查看
Object是基类,所有类的祖宗;

Type是类型,如基本数据类型;

Class是对象,每个类的对象的共性做的抽象。

Type的值可以为:java.util.List<java.util.List<com.flyread.optwebcontainer.biz.httpRequest.HttpClientUtil>>

然后我们可以用......Class也是有getSimpleName()等方法的。
Class<?> keySonClazz = Class.forName(Type.getTypeName());


创建Class对象,Class<T> clazz = Object.class = obj.getClass();
T t = clazz.newInstance();


Class实例化后就是对象,如类A,A.class就是class对象。

反射详情:http://www.cnblogs.com/lzq198754/p/5780331.html

泛型例子:



利用泛型建泛型数组:

/**
* 根据数组的最小一层非数组对象和数组的维度,生成多维度数组类型
*
* @param clazz      数组的最小一层非数组类型
* @param dimensions 数组的维度
* @param <T>
* @return
*/
protected <T> Class<?> genDimensionsArrayClass(Class<T> clazz, int dimensions) {
if (dimensions == 1) {
return Array.newInstance(clazz, 10).getClass();
} else if (dimensions > 1) {
return Array.newInstance(genDimensionsArrayClass(clazz, dimensions - 1), 10).getClass();
} else {
System.err.println("数组维度异常,异常维度为:" + dimensions);
throw new TestngCSVException(TestngCSVException.OBJECT_TRANS, "数组维度异常,异常维度为:" + dimensions);
}
}


获得list、map、数组中的泛型对象:
Field field = t.getClass().getDeclaredField(fieldName);
String fieldTypeName = field.getGenericType().getTypeName();


fieldName为对应list或map的实体对象名称,fieldTypeName得到的结果是:java.util.List<java.lang.String>字符串,java.util.Map<java.lang.String, java.lang.String>,java.util.String[]字符串。然后去处理这些字符串吧,用Class.forName(");又将字符串变成对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: