Java编程思想--泛型

对比两个程序

例1,

//ArrayList类,运行是错误
import java.util.*;
class Apple{
	private static long counter;
	private final long id=counter++;
	public long id() {return id;}
}
class Orange{}
public class ApplesAndOrangesWithoutGenerics {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList apples=new ArrayList();
		for(int i=0;i<3;i++){
			apples.add(new Apple());
		}
		apples.add(new Orange());
		for(int i=0;i<apples.size();i++){
			((Apple)apples.get(i)).id();//需要类型转换
		}
	}

}

结果

编译没问题,在运行时出错

原因,ArrayList类中即包含Apple对象,又包含Orange对象,再取出对象时,不能把Orange对象转换成Apple

可以使用泛型解决这个问题

例2

import java.util.*;

class GrannySmith extends Apple{}
class Gala extends Apple{}
class Fuji extends Apple{}
class Braeburn extends Apple{}
public class GenericsAndUpcasting {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Apple> apples=new ArrayList<Apple>();
		apples.add(new GrannySmith());
		apples.add(new Gala());
		apples.add(new Fuji());
		apples.add(new Braeburn());
		for(Apple c:apples)
			System.out.println(c);
	}

}

结果

GrannySmith@1888759
Gala@6e1408
Fuji@e53108
Braeburn@f62373

可以定义专门保存Apple对象的容器类ArrayList

通过泛型,就可以在编译期防止将错误类型的对象放置到容器中

关于输出

程序的输出是从Object默认的toString()方法产生的,该方法将打印类名,后面跟随该对象的散列码的无符号十六进制表示(散列码通过hashCode()方法产生)




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值