【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()是自动执行转型。这样在使用时更加清楚。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值