Java教程

关于java ArrList中的泛型数组

本文主要是介绍关于java ArrList中的泛型数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在java中泛型具有泛型擦除的特质,在通过编译之后java将所有对象视为object类型,而对于Java的数组来说,他必须知道它持有的所有对象的具体类型,而泛型的这种运行时擦除机制违反了数组安全检查的原则。比如像下面的代码是报错的:

但是我们可以先定义一个object类型的数组,再对引用的强制转换将其转为泛型数组

这样虽然没有错误,但是似乎是没有意义的,因为所有Obiect的子类换句话说就是除了基本类型都可以存入这个数组中,没有实际的作用。

于是我们可以定义一个带有泛型的类

public class FanXing<T> {
	private T arr[];
	private int size;
	
	public FanXing(int size)
	{
		this.size=0;
		arr=(T[]) new Object[size];
	}
	
	public void add(T num)
	{
		arr[size]=num;
		size++;
	}
}

下面是对这个类的调用

在类的实例化过程中我们可以定义泛型的类型,然后数组就强制转化为String类型的引用,往数组添加内容时发现,我们只可以添加String类型,而添加其他基本类型或者对象类型时就会报错。但是我们需要注意的是像开始所说的一样,我们的编译器只是卡了引用被强制转换的类型这一关,但是在编译通过后,java只知道他是一个Object类型而已。

观察源码后发现,实际上在Java原生的ArrayList类中,也是这样使用ArrayList数组的,使用类似的操作也会出现报错信息。

PS:由于本人是初学者,以上只是在学习过程中的个人总结和思考,参考价值不大,如有错误,希望能够指正。

这篇关于关于java ArrList中的泛型数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!