java基础之巧用泛型避免类型转换错误

目录

1.场景举例

2.不用泛型的解决方式

3.利用泛型来约束数据类型


1.场景举例

请看下面的程序,原来程序的本意是往list中添加int类型的数据,但是不小心混进来一个Stirng类型的数据,后面遍历数组的时候是以int类型的数据去取,将里面的数据强制转换为Integer,由于存在String类型的数据,结果转换的时候出现了类型转换异常的错误。

public class GenericDemo {
    public static void main(String[] args) {
        GenericDemo genericDemo = new GenericDemo();
        genericDemo.genericTest();
    }
    public void genericTest(){
        ArrayList  list = new ArrayList();
        list.add(99);
        list.add("tom");
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
//            java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
            int o =(Integer) iterator.next();
            System.out.println(o);
        }
    }
}

2.不用泛型的解决方式

既然我们需要拿到的数据是int类型的,那么我们可以做一个判断,如果是int 类型的时候,我们再来取这个的值。但是这种方式是亡羊补牢,是问题发生之后的解决方式,那么我们可以不可以在问题发生之前找到这个问题呢?这个时候,请来看看jdk1.5之后为我们提供的泛型这种方式。

public class GenericDemo {
    public static void main(String[] args) {
        GenericDemo genericDemo = new GenericDemo();
        genericDemo.genericTest();
    }
    public void genericTest(){
        ArrayList objects = new ArrayList<>();
        objects.add(123);
        objects.add("tom");
        Iterator iterator = objects.iterator();
        while(iterator.hasNext()){
            Object o = iterator.next();
            if(o instanceof Integer) {
                System.out.println(o);
            }


        }
    }
}

3.利用泛型来约束数据类型

在这里我们为Arraylist加上integer的泛型约束,(Arraylist)它规定了此时的ArrayList里面只能添加int类型的数据。,此时我们可以看到,在编译的过程中,添加进来的tom字符串类型的数据已经报错了,这就让这个问题在编译时期就得到了暴露。也就是说,在List集合所需类型单一的情况下,我们可以利用泛型来约束所加入的数据类型,保证数据类型,避免发生类型转换错误。

java基础之巧用泛型避免类型转换错误_第1张图片

你可能感兴趣的:(java基础)