什么是泛型?有什么好处?

本文介绍了Java泛型的引入、优点(提高代码复用性和安全性)、实现方式(类型擦除)、类型擦除的缺点以及List类型的区别。还展示了如何在泛型为Integer的ArrayList中通过反射存储String对象。
摘要由CSDN通过智能技术生成

目录

面试回答

知识扩展

泛型时如何实现的

类型擦除的缺点有哪些?

List,List,List 之间的区别

在泛型为 Integer 的 ArrayList 中存放一个 String 类型的对象


面试回答

Java 泛型(generics)是 JDK 5 引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用时在 JDK 5 中的新集合类框架中。

泛型的好处有两个:

  1. 方便:可以提高代码的复用性。以 List 接口为例,我们可以将 String、Integer 等类型放入 List 中,如不用泛型,存放 String 类型要写一个 List 接口,存放 Integer 要写另外一个 List 接口,泛型可以很好的解决这个问题。
  2. 安全:在泛型出之前,通过 Object 实现的类型转换需要在运行时检查,如果类型转换出错,程序直接 GG,可能会带来毁灭性打击。而泛型的作用就是在编译时做类型检查,我无疑增加程序的安全性。

知识扩展

泛型时如何实现的

Java 中的泛型通过类型擦除的方式来实现,通俗点理解,就是通过语法糖的形式,在 .java -> .class转换的阶段,将 List<String> 擦除调转为 List 的手段。换句话说,Java 的泛型只在编译期,JVM 是不会感知到泛型的。

类型擦除的缺点有哪些?

  1. 泛型不可以重载
  2. 泛型异常类不可以多次 catch
  3. 泛型类中的静态变量也只有一份,不会有多份

List<?>,List<Object>,List 之间的区别

  1. List<?> 是一个未知类型的 List,而 List<Object> 其实是任意类型的 List。可以把 List<String>List<Integer> 赋值给 List<?>,去不能把 List<String> 赋值给 List<Object>
  2. 可以把任何带参数的类型传递给原始类型 List,但却不能把 List<String> 赋值给 List<Object>,因为会产生编译错误(不支持协变)。

在泛型为 Integer 的 ArrayList 中存放一个 String 类型的对象

通过反射可以实现:

    public static void main(String[] args) throws Exception {
        ArrayList<Integer> list=new ArrayList<>();
        Method method=list.getClass().getMethod("add",Object.class);
        method.invoke(list,"Java 反射机制实例");
        System.out.println(list.get(0));
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

协享科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值