美文网首页
深入理解Java中的泛型(二)泛型的上界与下界

深入理解Java中的泛型(二)泛型的上界与下界

作者: 不思进取的码农 | 来源:发表于2021-08-15 00:32 被阅读0次

什么是泛型的上界与下界

上界

extends 关键字声明,表示参数化的类型可能是所指定的类或者其任意子类。例如<? extends Fruit> 泛型的上界就是 Fruit 类

//泛型的上界就是 Fruit 类
 ArrayList<? extends Fruit> fruitList = new ArrayList<Apple>();

下界

super 关键字声明,表示参数化的类型可能是所指定的类型或者其任意父类。例如<? super Apple>,泛型的下界就是 Apple 类。

//泛型的下界就是 Apple 类
List<? super Apple> appleList = new ArrayList<Fruit>();

泛型的上界与下界的限制

  • 上界的list只能get,不能add(确切地说不能add出除null之外的对象,包括Object)

  • 下界的list只能add,不能get

规定了上界:如果add添加对象,java不知道要为哪一个具体的类添加引用,但java不会自动选择;如果get对象,却可以(人为地)使用上界类创建引用了(因为代码中规定了上界,一看便知)。

规定了下界:如果add添加对象,java不知道要为哪一个具体的类添加引用,这里就可以(人为地)添加下界类的子类对象了(因为代码中规定了下界,一看便知);如果get对象,只能用预获取的类的‘同类’或父类创建引用,但程序员不知道get出来的是哪个类。

上界 下界

示例代码:

import java.util.ArrayList;
import java.util.List;
  
class Fruit {}
class Apple extends Fruit {}
class Jonathan extends Apple {}
class Orange extends Fruit {}
  
public class CovariantArrays {
  public static void main(String[] args) {
    //上界
    List<? extends Fruit> flistTop = new ArrayList<Apple>();
    flistTop.add(null);
    //add Fruit对象会报错
    //flist.add(new Fruit());
    Fruit fruit1 = flistTop.get(0);
  
    //下界
    List<? super Apple> flistBottem = new ArrayList<Apple>();
    flistBottem.add(new Apple());
    flistBottem.add(new Jonathan());
    //get Apple对象会报错
    //Apple apple = flistBottem.get(0);
  }
}

相关文章

  • 深入理解Java中的泛型(二)泛型的上界与下界

    什么是泛型的上界与下界 上界 用 extends 关键字声明,表示参数化的类型可能是所指定的类或者其任意子类。例如...

  • 泛型:super、extend、?

    先讲结果: super 是指定泛型的『下界』; extend 是指定泛型的『上界』; ?是通配符; 看个例子 打印...

  • 泛型

    java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一Java泛型深入理解加泛型面试数组的协变性与范型的不可变性

  • JAVA泛型总结

    泛型命名 泛型一些约定俗成的命名: 上界通配符 可以使用上界通配符来缩小类型参数的类型范围。 下界通配符 下界通配...

  • Kotlin-泛型

    源自:码上开学-Kotlin的泛型 kotlin的in和out对应的是java中带上界和下界的通配符?号。【in】...

  • 最强整理:一线互联网移动架构师筑基必备技能之Java篇

    移动架构师筑基必备技能 一、深入Java泛型 泛型的作用与定义通配符与嵌套泛型上下边界RxJava中泛型的使用分析...

  • 【Android】 Kotlin(七)泛型

    深入理解Kotlin泛型 Kotlin 的泛型与 Java 一样,都是一种语法糖,即只在源代码中有泛型定义,到了c...

  • Java 泛型之上界下界通配符

    本Java教程是为JDK 8编写的。本页描述的示例和实践没有利用后续版本中引入的改进。 泛型,继承和子类 如你所知...

  • Java 泛型擦除原理

    问:请比较深入的谈谈你对 Java 泛型擦除的理解和带来的问题认识? 答:Java 的泛型是伪泛型,因为在编译期间...

  • java泛型、泛型的基本介绍和使用

    现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java...

网友评论

      本文标题:深入理解Java中的泛型(二)泛型的上界与下界

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