【Java】----泛型

Apple和Orange都放在了容器里,将它们取出后都发生了运行时异常,因为这个示例没有使用泛型。
Apple和Orange类是不一样的,它们除了都是Object之外没有其他的共性。(如果一个类没有显示地声明继承哪个类,那么它自动继承Object)。因为ArrayList保存的是Object,因此可以通过ArrayList的add()方法将Apple对象放进容器中,Orange对象也可以添加。但当使用ArrayList的get()方法取出Apple的对象时,得到的只是Object引用,必须将其强制转型为Apple,否则就会得到语法错误。

import java.util.*;

class Apple {
     
	private static long counter;
	final long id = counter++;

	public long id() {
     
		return id;
	}
}

class Orange {
     

}

public class 泛型 {
     
	public static void main(String[] args) {
     
		ArrayList apples = new ArrayList();
		for (int i = 0; i < 3; i++)
			apples.add(new Apple());
		apples.add(new Object());
		for (int i = 0; i < apples.size(); i++)
			((Apple) apples.get(i)).id();

	}
}

可以声明Arra,而不仅仅是ArrayList,<>括起来的是类型参数(可以有多个),它指定了这个容器实例可以保存的类型。通过使用泛型,可以在编译时期防止将错误类型的对象放置到容器中。加泛型之后,编译器就会阻止Orange放入Apple中,这就变成了一个编译期错误。

将元素从List中取出时,类型转换不在是必须的了,以为List知道它保存的是什么类型,因此在调用get()是自动执行转型。这样在使用时更加清楚。

你可能感兴趣的:(Java)