泛型是jdk1.5后出现的,它的出现起到什么作用?我们先把这个问题放在这里,后续就知道了
在jdk1.5之前 在集合中添加数据是这样的
public class GenericTest {
public static void main(String[] args) {
List list = new ArrayList();
list.add(123);
list.add("abc");
Iterator al = list.iterator();
while(al.hasNext()){
String content = (String) al.next();
System.out.println("content="+content);
}
}
}
这代码存放二方面问题
第一:会警告 说这不安全
第二:会报错,因为向集合中添加了字符串和数字,但是我们在强转的时候就直接转成了字符串,
报错信息:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
这错误就是说类型转换异常,Integer不能转成String
而且这错误是发生在运行时期,也就是说我们做的项目交给客户使用,发生这种事,肯定对你公司的技术实力印象非常不好
所以我们要让这错误发生在编译时期,就可以避免这些问题,
那么这个时候就使用到了泛型了,
我们对上面的代码使用泛型进行改良下,
public class GenericTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("ab");
list.add("ac");
for(String str:list){
System.out.println(str);
}
}
}
这说明集合中只能存放String类型的数据,其他类型的数据加进来,编译器就会报错,
还有在取集合中的数据就不用强转了,
总结:
泛型出现的好处:
将运行时期出现的问题转移到了编译时期,这样程序员就可以对程序进行控制了
泛型的格式:
在jdk1.5之前 在集合中添加数据是这样的
public class GenericTest {
public static void main(String[] args) {
List list = new ArrayList();
list.add(123);
list.add("abc");
Iterator al = list.iterator();
while(al.hasNext()){
String content = (String) al.next();
System.out.println("content="+content);
}
}
}
这代码存放二方面问题
第一:会警告 说这不安全
第二:会报错,因为向集合中添加了字符串和数字,但是我们在强转的时候就直接转成了字符串,
报错信息:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
这错误就是说类型转换异常,Integer不能转成String
而且这错误是发生在运行时期,也就是说我们做的项目交给客户使用,发生这种事,肯定对你公司的技术实力印象非常不好
所以我们要让这错误发生在编译时期,就可以避免这些问题,
那么这个时候就使用到了泛型了,
我们对上面的代码使用泛型进行改良下,
public class GenericTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("ab");
list.add("ac");
for(String str:list){
System.out.println(str);
}
}
}
这说明集合中只能存放String类型的数据,其他类型的数据加进来,编译器就会报错,
还有在取集合中的数据就不用强转了,
总结:
泛型出现的好处:
将运行时期出现的问题转移到了编译时期,这样程序员就可以对程序进行控制了
泛型的格式:
通过<>来指定集合中存放元素的类型
那么我们什么时候用泛型呢,其实查看api发现,比如;