泛型擦除—结束

1.概念

        泛型,即参数化类型,目的是将具体类型参数化,在使用时需要传入具体类型进行替换

注意:对象.getClass()方法返回包含指定对象所属类的 Class 对象

public class Demo {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList();
        list1.add("String");
        List<Integer> list2 = new ArrayList<>();
        list2.add(1);
        System.out.println(list1.getClass()==list2.getClass());//true
        System.out.println("list1集合:"+list1.getClass());//class java.util.ArrayList
    }
}

2.指定泛型不指定泛型区别

主要区别在于类型安全性和代码可读性。

  1. 指定泛型

    • 当我们指定泛型时,比如 List<String>,编译器会在编译期间进行类型检查,确保集合中只能存储指定类型的元素。这可以提高代码的类型安全性,避免在运行时出现类型转换异常。
    • 指定泛型还可以增加代码的可读性,让其他开发者更容易理解代码的意图,同时也能减少在编写代码时的错误。

  1. 不指定泛型

    • 如果不指定泛型,比如 List,则表示该集合可以存储任意类型的元素,相当于使用原始类型。在这种情况下,编译器无法进行类型检查,可能导致在运行时出现类型转换异常。
    • 不指定泛型会降低代码的类型安全性,因为无法保证集合中存储的元素类型是否符合预期,需要开发者在使用时自行确保类型的正确性。

注意:不报错的Number是Integer,Double的父类,同一父类的最小级,直到Object

           而add4是因为  Integer 与 Boolean 同父类就只是Object类

3.类型擦除带来的问题

        在编译期间,泛型信息会被擦除,编译后的字节码中将不再包含具体的泛型类型信息。因此,在运行时无法获取泛型类型的具体信息。但是对于需要明确指定泛型类型参数的情况,编译器无法根据上下文推断出类型,因此需要显式地指定类型参数,这时候就需要使用类名来调用泛型方法

文章很详细,直接参考即可

Java 泛型:泛型和类型擦除详解-修改中..._泛型擦除-CSDN博客

【Java】 泛型擦除-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值