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); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了