java_不指定泛型的类型参数的弊端以及使用泛型的好处(以集合为例)

package experiment4.study;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class GenericDemo {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("abc");
coll.add("zjgsu");
coll.add(5);//由于集合没有做任何限定,任何类型都可以给其中存放
Iterator it = coll.iterator();
while (it.hasNext()) {
//需要打印每个字符串的长度,就要把迭代出来的对象转成String类型
String str = (String) it.next();/*在处理第三个元素(是整形数5),不能够转换为String;会引发java.lang.ClassCastException*/
System.out.println(str+":"+str.length());
}
}
}
/*Exception(意外/例外;expectation) in thread "main" java.lang.ClassCastException:
class java.lang.Integer (cannot be cast to class java.lang.String不能转换到类java.lang.String中;cast计算;投射) (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap') at experiment4.study.GenericDemo.main(GenericDemo.java:16)*/

由于集合中什么类型的元
素 都 可 以 存 储 。 导 致 取 出 时 强 转 引 发 运 行 时
ClassCastException。
Collection虽然可以存储各种对象,但实际上通常
Collection只存储同一类型对象。例如都是存储字符串对
象。
泛型:可以在类或方法中预先使用未知的类型。
一般在创建对象时,将未知的类型确定具体的类型。当没
有指定泛型时,默认类型为Object类型。

使用泛型的好处
将运行时期的ClassCastException,转移到了编译时期变成了编译失
败。
避免了类型强转的麻烦。

package experiment4.study;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class GenericDemo2{
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();//集合明确类型为String
coll.add("abc");
coll.add("zjgsu");
//coll.add(5);//当集合明确类型后,存放类型不一致就会编译报错
// 集合已经明确具体存放的元素类型,那么在使用迭代器的时候,
// 迭代器也同样会知道具体遍历元素类型
Iterator it = coll.iterator();//Iterator 不传入<参数>也可行;而如果要指定的话也只能指定为String,和coll里的元素类型相匹配;
Iterator<String> ite=coll.iterator();
while (ite.hasNext()) {
//需要打印每个字符串的长度,就要把迭代出来的对象转成String类型
String str = (String) ite.next();
//当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型
System.out.println(str);
}
}
}
posted @   xuchaoxin1375  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示