美文网首页
【java】浅谈java泛型的安全性

【java】浅谈java泛型的安全性

作者: AmaAnchor | 来源:发表于2022-04-10 16:33 被阅读0次

先看一段代码:

ArrayList<Manager> managers =new ArrayList<>();
ArrayList<Employee> employees=managers;//报错

  这段代码第二句话会报错,是因为在java中ArrayList<Manager>和ArrayList<Employee>没有继承关系(尽管Manager和Employee是继承关系)。
   基于这样的事实,没法让一个参数同时接收ArrayList<Manager>和ArrayList<Employee>
这样就导致通过多态(向上转型增强程序的扩展性)的理念没法实现,所以就出现了通配符。

泛型的限定上限定义:

<? extends E> 接受 E 或者 E 的子类型。
泛型的限定下限:
<? super E> 接收 E 或者 E 的父类。

泛型通配符的安全性

使用限定上限时,访问器方法是安全的,更改器方法是不安全的
使用限定下限时,访问器方法是不安全的,更改器方法是安全的

我用如下例子说明
一个类Manager ,继承自类Employee

ArrayList<? extends Employee> managers=new ArrayList<Manager>();
managers.set(0,new Employee());//报错
Employee em=managers.get(0);//编译通过

<?extends Employee> 使用set方法时,就好像是向容器里添加Employee,故而会破坏ArrayList<Manager>;
使用get方法时,则是将Manager对象赋值给Employee引用,这是正确的

ArrayList<? super Manager> employees=new ArrayList<Employee>();
employees.set(0,new Manager());//编译通过

<? super Manager> 使用set方法时,就好像是向容器里添加Manager,不会破坏ArrayList<Employee>;
使用get方法时,则是将Employee对象赋值给Manager引用,这是不安全的,所以会报错。

我们需要知道,泛型的一些设计理念是为了帮助应用程序员排除调用参数上的不必要的限制。

相关文章

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 【java】浅谈java泛型的安全性

    先看一段代码: 这段代码第二句话会报错,是因为在java中ArrayList和ArrayList...

  • Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • 一文带你认识Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型

    Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型 在代码进入和离开的边界处,会处理泛型 Java泛型作...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • 浅谈Java泛型

    使用泛型的目的 当我们第一次接触泛型时,第一个问题肯定会是,为什么要使用泛型?最直接的答案是为了避免转型,使得编译...

网友评论

      本文标题:【java】浅谈java泛型的安全性

      本文链接:https://www.haomeiwen.com/subject/idvvsrtx.html