2
回答
关于Java泛型檫除的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

看《Java编程思想》泛型章节有讲到关于泛型檫除的问题,说是一个泛型类,在编译时会把泛型T全部檫除为它的边界类型,没有定义边界的话就檫除为Object,所以编译器无法看到泛型具体的类型是什么,因为它把具体类型的类型信息全部檫除了,比如下面代码:

public class ArrayMaker<T> {
	
	private Class<T> kind;
	
	public ArrayMaker(Class<T> kind) {
		this.kind = kind;
	}
	
	public T create() {
		System.out.println(kind);
		try {
			return kind.newInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	
	public static void main(String[] args) {
		
		ArrayMaker<String> arrayMaker = new ArrayMaker<String>(String.class);
		String testStrings = arrayMaker.create();
		System.out.println(testStrings.getClass());
	}

}

我的理解是既然檫除了具体类型的类型信息,那在create方法里面打印kind应该看不到String类型啊,可是能得到java.lang.String,是我理解错了吗?

<无标签>
举报
蜡笔小小小新
发帖于8个月前 2回/52阅
顶部