Tiger学习 之 Type-Safe<generic> ...

泛型<Generic>之类型安全<Type-Safe>
1->List(collection,数组...类似)
在构造对像的时候就可以知道该对象操作的是什么样的数据<对象>类型,类型安全且省去烦人的转换类型。
通过Object<E> = new Object<E>();来实现,E占位符


[quote]

//Tiger之前
List list = new ArrayList();
list.add("String");
list.add(new Integer(111));
[color=red]list.add(111);//提示错误,不能存放primitiv值,Tiger可以,[/color]
[color=blue]//操作的类型没有确定(String和Integer类型可以同时放在List对象),类型不安全[/color]

//取值
[color=red]String str = list.get(0); //提示错误,必须有类型转换,如下写法[/color]
String str = (String)list.get(0);


//Tiger
List<String> tiger = new ArrayList<String>();//说明只能用操作String类型
tiger.add("String");
[color=red]tiger.add(new Integer(111));//改语句编译器提示错误[/color]
[color=blue]//操作的类型确定(String和Integer类型可以同时放在List对象),类型安全[/color]

//取值
String str = tiger.get(0);//无需类型转换

[/quote]

but,generic不支持primitive类型,如以下代码不支持
[quote]
List<int> list = new ArrayList<int>
[/quote]


2->Map
跟List一样,只是需要两个类型参数,如:
[quote]
Map<String,String> strings = new Map<String,String>
Map<Long,Object> maps = new Map<Long,Object>
[/quote]


3->Iterator
当你对一个集合(collection)参数化了,那么你也应该参数化Iterator(当然,是用到collection的Iterator时候),否则不是编译失败就是运行失败...且看看

[quote]

List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");

for(Iterator i = list.iterator();i.hasNext();){
[color=red]//下面这一句编译不通过,提示类型转换错误,list参数化了,但是Iterator也需要参数化,写成 Iterator<String> i = list.iterator();
String str = i.next(); [/color]
System.out.println(str);
}
[/quote]


//如果这样,collection不参数化,Iterator参数化,运行抛出异常

[quote]
List list = new ArrayList();
list.add("Hello");
list.add("World");
list.add(1);

for(Iterator<String> i = list.iterator();i.hasNext();){
[color=red] //输出 1 时,抛出:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer异常
String str = i.next(); [/color]
System.out.println(str);
}
[color=red]//List list = new ArrayList(); 写成 List<String> list = new ArrayList<String>();
[/color][/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值