异常:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

当在泛型类中构造泛型数组时,若使用下面的构造方法,则会抛出异常:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

例:

	public LinearList() {
		arr = (T[])(new Object[this.maxSize]);
		size = 0;
	}
	
	public LinearList(int maxSize) {
		this.maxSize = maxSize;
		arr = (T[])(new Object[this.maxSize]);
		size = 0;
	}

原因是这种构造方法构造出的数组实际上运行时仍然是Object[],而不是T[]。

解决办法:

使用如下的构造方法,通过类型标记得到T[]:

	public LinearList(Class<T> type) {
		arr = (T[])(Array.newInstance(type, maxSize));
		size = 0;
	}
	
	public LinearList(Class<T> type, int maxSize) {
		arr = (T[])(Array.newInstance(type, maxSize));
		size = 0;
	}

猜你喜欢

转载自blog.csdn.net/g28_gwf/article/details/81682122