本文主要是介绍Tiger学习 之 Type-Safegeneric ...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
泛型<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]
这篇关于Tiger学习 之 Type-Safegeneric ...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!