`
linxizeng
  • 浏览: 102269 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

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


引用


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

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


//Tiger
List<String> tiger = new ArrayList<String>();//说明只能用操作String类型
tiger.add("String");
tiger.add(new Integer(111));//改语句编译器提示错误
//操作的类型确定(String和Integer类型可以同时放在List对象),类型安全
 
//取值
String str = tiger.get(0);//无需类型转换



but,generic不支持primitive类型,如以下代码不支持
引用

List<int> list = new ArrayList<int>




2->Map
跟List一样,只是需要两个类型参数,如:
引用

Map<String,String> strings = new Map<String,String>
Map<Long,Object> maps = new Map<Long,Object>



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

引用


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

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

    System.out.println(str);
}



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

引用

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

for(Iterator<String> i  = list.iterator();i.hasNext();){
    //输出 1 时,抛出:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer异常
    String str = i.next();

    System.out.println(str);
}
//List list = new ArrayList(); 写成 List<String> list = new ArrayList<String>();

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics