1.1优点
1.提交了java的类型安全
泛型在很大程度上来提高了java的程序安全。例如在没有泛型的情况下,很容易将字符串 123 转成 Integer 类型的 123 亦或者 Integer 转成 String,而这样的错误是在编译期无法检测。而使用泛型,则能很好的避免这样的情况发生。
2.不需要烦人的强制类型转换
泛型之所以能够消除强制类型转换,那是因为程序员在开发的时候就已经明确了自己使用的具体类型,这不但提高了代码的可读性,同样增加了代码的健壮性。
3. 提高了代码的重用性
泛型的程序设计,意味着编写的代码可以被很多不同类型的对象所重用
二,为什么要使用泛型
1、解决元素存储的安全性问题,好⽐商品、药品标签,不会弄错。
2.解决获取数据元素时,需要类型强制转换的问题,好⽐不⽤每回拿商品、药品都要辨别。
2、Java泛型可以保证如果程序在编译时没有发出警告,运⾏时就不会产⽣ClassCastException异常。同时,代码更加简洁、健壮。
二、泛型使用与不使用的区别
1、泛型的没有使用会造成什么后果呢
import org.junit.Test;
import java.util.ArrayList;
/**
* 泛型的使⽤
* 1.jdk5.0新增的特征
*/
public class GenericTest {
//在集合中使⽤泛型之前的情况:
@Test
public void test(){
ArrayList list = new ArrayList();
//需求:存放学⽣的成绩
list.add(78);
list.add(49);
list.add(72);
list.add(81);
list.add(89);
//问题⼀:类型不安全
// list.add("Tom");
for(Object score : list){
//问题⼆:强转时可能出现类型转化异常
int stuScore = (Integer)score;
System.out.println(stuScore);
}
}
}
那我们发现,没有添加泛型的时候呢,我们可以向list集合添加各种各样类型的数据,那么就会导致在数据类型转换的时候发生异常,那么我们添加泛型的好处也是很明显的了。
2.添加泛型的使用会发生什么效果呢?
public class GenericTest {
//!在集合中使⽤泛型的情况:以ArrayList为例
@Test
public void test2(){
//注意点:泛型的类型必须是类,不能是基本数据类型。需要⽤到基本数据类型的位置,拿包装类替换
//看图例这⾥规定泛型是Integer,使⽤add⽅法的时候也是Integer
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(78);
list.add(49);
list.add(72);
list.add(81);
list.add(89)
//编译时,就会进⾏类型检查,保证数据的安全
// list.add("Tom");
//⽅式⼀:
// for(Integer score :list){
// //避免了强转的操作
// int stuScore = score;
//
// System.out.println(stuScore);
// }
//⽅式⼆:
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int stuScore = iterator.next();
System.out.println(stuScore);
}
}
//在集合中使⽤泛型的情况:以HashMap为例
@Test
public void test3(){
// Map<String,Integer> map = new HashMap<String,Integer>();
//jdk7新特性:类型推断, 实例化的时候就可以不⽤写泛型,空即可
Map<String,Integer> map = new HashMap<>();
map.put("Tom",87);
map.put("Tone",81);
map.put("Jack",64);
// map.put(123,"ABC");
//泛型的嵌套
Set<Map.Entry<String,Integer>> entry = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();
while(iterator.hasNext()){
Map.Entry<String, Integer> e = iterator.next();
String key = e.getKey();
Integer value = e.getValue();
System.out.println(key + "----" + value);
}
}
}
使用了泛型,就可以达到很多方便开发的效果,可以实现泛型的嵌套,也不用担心数据转换异常问题,有错误编译期间就会报错。