iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java 中super T和extends T的区别是什么
  • 211
分享到

Java 中super T和extends T的区别是什么

2023-06-17 05:06:22 211人浏览 泡泡鱼
摘要

Java 中super T和extends T的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。extendsList< extends Nu

Java 中super T和extends T的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

extends

List< extends Number> foo3的通配符声明,意味着以下的赋值是合法的:  // Number "extends" Number (in this context)  List< extends Number> foo3 = new ArrayList< extends Number>();  // Integer extends Number  List< extends Number> foo3 = new ArrayList< extends Integer>();  // Double extends Number  List< extends Number> foo3 = new ArrayList< extends Double>();
  • 读取操作通过以上给定的赋值语句,你一定能从foo3列表中读取到的元素的类型是什么呢?你可以读取到Number,因为以上的列表要么包含 Number元素,要么包含Number的类元素。你不能保证读取到Integer,因为foo3可能指向的是List<Double>。你 不能保证读取到Double,因为foo3可能指向的是List<Integer>。

  • 写入操作过以上给定的赋值语句,你能把一个什么类型的元素合法地插入到foo3中呢?你不能插入一个Integer元素,因为foo3可能指向 List<Double>。你不能插入一个Double元素,因为foo3可能指向List<Integer>。你不能插入一个 Number元素,因为foo3可能指向List<Integer>。你不能往List< extends  T>中插入任何类型的对象,因为你不能保证列表实际指向的类型是什么,你并不能保证列表中实际存储什么类型的对象。***可以保证的是,你可以从中读 取到T或者T的子类。

super

现在考虑一下List< super T>。

List< super Integer> foo3的通配符声明,意味着以下赋值是合法的:  // Integer is a "superclass" of Integer (in this context)  List< super Integer> foo3 = new ArrayList<Integer>();  // Number is a superclass of Integer  List< super Integer> foo3 = new ArrayList<Number>();  // Object is a superclass of Integer  List< super Integer> foo3 = new ArrayList<Object>();
  • 读取操作通过以上给定的赋值语句,你一定能从foo3列表中读取到的元素的类型是什么呢?你不能保证读取到Integer,因为foo3可能指向 List<Number>或者List<Object>。你不能保证读取到Number,因为foo3可能指向 List<Object>。***可以保证的是,你可以读取到Object或者Object子类的对象(你并不知道具体的子类是什么)。

  • 写入操作通过以上给定的赋值语句,你能把一个什么类型的元素合法地插入到foo3中呢?你可以插入Integer对象,因为上述声明的列表都支持 Integer。你可以插入Integer的子类的对象,因为Integer的子类同时也是Integer,原因同上。你不能插入Double对象,因为 foo3可能指向ArrayList<Integer>。你不能插入Number对象,因为foo3可能指向 ArrayList<Integer>。你不能插入Object对象,因为foo3可能指向 ArrayList<Integer>。

PECS

请记住PECS原则:生产者(Producer)使用extends,消费者(Consumer)使用super。

生产者使用extends

如果你需要一个列表提供T类型的元素(即你想从列表中读取T类型的元素),你需要把这个列表声明成< extends T>,比如List< extends Integer>,因此你不能往该列表中添加任何元素。

消费者使用super

如果需要一个列表使用T类型的元素(即你想把T类型的元素加入到列表中),你需要把这个列表声明成< super T>,比如List< super Integer>,因此你不能保证从中读取到的元素的类型。

即是生产者,也是消费者

如果一个列表即要生产,又要消费,你不能使用泛型通配符声明列表,比如List<Integer>。

例子

请参考java.util.Collections里的copy方法(jdk1.7):

Java 中super T和extends T的区别是什么

看完上述内容,你们掌握Java 中super T和extends T的区别是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Java 中super T和extends T的区别是什么

本文链接: http://www.lsjlt.com/news/287284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 中super T和extends T的区别是什么
    Java 中super T和extends T的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。extendsList< extends Nu...
    99+
    2023-06-17
  • golang中的[]*T、*[]T和*[]*T分别是什么
    这篇文章主要讲解了“golang中的[]*T、*[]T和*[]*T分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang中的[]*T、*[]T和*[]*T分别是什么”吧!最近看...
    99+
    2023-06-20
  • c++中\n和\t有什么区别
    c++kquote>\n和\t的区别:换行符 (\n):添加新行,将光标移动到下一行。制表符 (\t):添加水平制表符,将光标移动到下一个制表符位置(默认间隔 8 个字符)。 c+...
    99+
    2024-05-01
    c++
  • Java中super和extends的作用是什么
    Java中super和extends的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。List< extends T>表示该集合中存在的都是类型T的子类...
    99+
    2023-06-20
  • Java 中泛型 T 和 ? 的区别详解
    目录泛型中 T 类型变量 和 通配符 区别Generic Types 类型变量用法2.声明通用的方法 – 泛型方法:有界类型参数Wildcards 通配符1.上界通配符...
    99+
    2024-04-02
  • c++中/n和/t的区别
    c++ 中 \n 为换行符,将光标移至下一行的开头;\t 为制表符,将光标移至下一个制表位。它们用于格式化输出,\n 创建新行,\t 给文本缩进。 C++ 中 \n 和 \t 的区别 ...
    99+
    2024-05-01
    c++ 格式化输出
  • java泛型中占位符T和?有什么区别
    泛型中占位符T和有什么区别?这是一个好问题,有的人可能弄不清楚,所以我们这里简单的演示一下,相信大家一定能弄清楚的! 先上两段代码: public static <T> ...
    99+
    2024-04-02
  • Java泛型中<?>和<T>的区别浅析
    目录一、定义1、T 代表一种类型2、是通配符,泛指所有类型二、使用1、T 一般有两种用途2、<> 的限制用途3、三种泛型限定三、总结1、从定义上看2、从用途上看补充:场景...
    99+
    2022-12-19
    java泛型?和T的区别 java 泛型 T ? Java 泛型 ?
  • Java泛型中T和问号的区别
    本篇内容主要讲解“Java泛型中T和问号的区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java泛型中T和问号的区别”吧!类型本来有:简单类型和复杂类型,引入泛型后把复杂类型分的更细了.概述...
    99+
    2023-05-30
    java
  • java中this和super的区别是什么
    java中this和super的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、We...
    99+
    2023-06-14
  • Java中的this和super区别是什么
    这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和supe...
    99+
    2023-06-25
  • 【Java List与对象】List<T>对象和对象List<T>的区别(125)
    List<T>对象:对象里面的元素属性包含List<T>(只有一个对象); 对象List<T>:List<T>里面的数据是对象类型(可以有多组对象,但必须是同一个类型); 测试案例: Book类: import java.util.List...
    99+
    2023-08-30
    java list windows
  • 【Java List与Map】List<T> Map与Map List<T>的区别(126)
    List<T> Map:List里面的数据类型包含Map; Map List<T>:Map里面value的数据类型包含List; 测试案例: import java.util.ArrayList;import java.util.HashM...
    99+
    2023-08-30
    java list windows
  • SQL 和 T-SQL 之间的区别
    在这篇文章中,我们将了解 SQL 和 T-SQL 之间的区别。SQL它是非过程语言。关系数据库使用 SQL。它代表结构化查询语言。它使用查询来查看和操作数据。使用DML和DDL操作-数据操作语言和数据定义语言。 它被认为是一种开源语言。它有...
    99+
    2023-10-22
  • java泛型中占位符T和?有哪些区别
    这篇文章主要讲解了“java泛型中占位符T和有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java泛型中占位符T和有哪些区别”吧!先上两段代码:public static...
    99+
    2023-06-30
  • java中super与this的区别是什么
    java中super与this的区别:super是当前对象里面的父对象的引用,而this指的是当前对象的引用。super调用基类中的某一个构造函数,而this调用的是本类中另一种形成的构造函数。super是用来访问直接父类中被隐藏的父类中成...
    99+
    2024-04-02
  • java中this和super有什么区别
    这篇文章将为大家详细讲解有关java中this和super有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,...
    99+
    2023-06-14
  • java中super和this有什么区别
    在Java中,super和this是两个关键字,用于引用父类和当前类的实例。1. super关键字:- super关键字用于引用父类...
    99+
    2023-08-11
    java
  • Class中Extends和Implements属性的区别是什么
    这篇文章给大家介绍Class中Extends和Implements属性的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。<span >var Animal = ne...
    99+
    2024-04-02
  • Java 中的 this 和 super 区别
    目录1、简介2、引子2.1 父类中声明无参构造函数2.2 子类显示的通过super调用父类的有参构造函数3、this4、super 5、总结5.1 对比差异 5.2 相同点 5.3 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作