泛型的注意事项:擦除问题基本数据类型
Posted Karl-hut
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型的注意事项:擦除问题基本数据类型相关的知识,希望对你有一定的参考价值。
关于Java泛型的类型擦除机制问题求教
T.getClass()或者T.class都是非法的,因为T是泛型变量。由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。
有一种变通的实现方式:
import java.lang.reflect.Array;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Generic extends Base
public static void main(String[] args)
Generic c = new Generic();
System.out.println(c.array);
Object array ;
public Generic()
array = Array.newInstance(getGenericType(0), 100);
class Base
public Class getGenericType(int index)
Type genType = getClass().getGenericSuperclass();
if (!(genType instanceof ParameterizedType))
return Object.class;
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0)
throw new RuntimeException("Index outof bounds");
if (!(params[index] instanceof Class))
return Object.class;
return (Class) params[index];
其中Base是泛型类,在父类中声明getGenericType,子类继承具体的Base,那么在子类中就可以通过getGenericType(0)获取到String的class. 参考技术A 返回T即可。
以上是关于泛型的注意事项:擦除问题基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章