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);
        }
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值