一篇文章带你了解Java泛型的super和extends

一、Java泛型的super和extends

Java泛型中的extends和super是两个非常重要的关键字,它们可以用来限定泛型的类型范围。一个类型可以使用extends关键字限制范围上界,使用super关键字限制范围下界。

上界使用extends关键字来表示,它的作用是限定参数的类型只能是继承自某个类的子类或某个实现了某个接口的实现类。下界使用super关键字来表示,它的作用是限定参数的类型只能是某个类的父类。

二、使用extends关键字限定泛型范围

以下是使用extends限定泛型范围的示例:

public class Test {

    public static void main(String[] args) {
        List<? extends Number> list1 = new ArrayList<Integer>();
        List<? extends Number> list2 = new ArrayList<Float>();
        //List<? extends Number> list3 = new ArrayList<String>(); 错误,String不是Number的子类
    }

}

这个示例中,我们使用泛型通配符(?)来表示一个不确定的类型,然后通过extends关键字来限定这个类型必须是Number的子类。在实际使用中,我们可以将实现了Number的子类,例如Integer和Float作为具体类型传递给这个泛型。

需要注意的是,使用extends关键字定义的泛型类型只能用来读取数据,不能用来写入数据,即它是只读的。

三、使用super关键字限定泛型范围

以下是使用super限定泛型范围的示例:

public class Test {

    public static void main(String[] args) {
        List<? super Integer> list1 = new ArrayList<Number>();
        List<? super Integer> list2 = new ArrayList<Object>();
        //List<? super Integer> list3 = new ArrayList<Float>(); 错误,Float不是Integer的父类
    }

}

这个示例中,我们使用泛型通配符(?)来表示一个不确定的类型,然后通过super关键字来限定这个类型必须是Integer的父类。在实际使用中,我们可以将Integer和它的父类Number和Object作为具体类型传递给这个泛型。

需要注意的是,使用super关键字定义的泛型类型只能用来写入数据,不能用来读取数据,即它是只写的。

四、总结

在Java泛型中,使用extends和super关键字可以限定泛型的类型范围,从而有效地增强了泛型的类型安全性。需要注意的是,extends只能用来读取数据,super只能用来写入数据,二者不能混用。在实际使用中,我们可以根据具体情况选择使用哪个关键字。

以上是针对“一篇文章带你了解Java泛型的super和extends”的完整攻略,其中包括了使用extends和super的示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解Java泛型的super和extends - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • python学习之新式类和旧式类讲解

    Python学习之新式类和旧式类讲解 1. 旧式类 在 Python 2 中,类默认是旧式类,其定义方式与 Python 3 中定义类的方式不同。在 Python 2 中,为了定义一个类,需要继承自 object 类。 class OldStyleClass: def __init__(self): pass 在旧式类中,多重继承遵循深度优先原则。 2. 新…

    other 2023年6月27日
    00
  • springBoot+dubbo+zookeeper实现分布式开发应用的项目实践

    以下是”Spring Boot + Dubbo + ZooKeeper 实现分布式开发应用的项目实践”的攻略: 基础知识 在实现分布式开发应用之前,需要先学习一些基础知识。这些知识包括: Spring Boot:一个开源的、快速开发的Java Web框架。 Dubbo:一个高性能的Java RPC框架。 ZooKeeper:一个开源的分布式应用程序协调服务。…

    other 2023年6月27日
    00
  • Highchart基础教程-图表的主要组成

    Highchart基础教程-图表的主要组成 Highcharts是一款功能强大的JavaScript图表库,可实现各种类型的图表,例如曲线图、饼图、散点图等。在使用Highcharts之前,我们需要了解图表的主要组成部分,以便更好地设计和定制自己的图表。 1. 图表容器 Highcharts图表呈现在一个容器或div中,容器是图表的父元素。我们需要在网页中创…

    其他 2023年3月28日
    00
  • Win10怎么设置WinX菜单? 自定义WinX菜单的方法

    我来为你详细讲解Win10设置WinX菜单以及自定义WinX菜单的方法。 一、WinX菜单是什么 WinX菜单是Win10系统中的一个快捷菜单,它可以通过快捷键Win+X或者鼠标右键单击开始菜单上的开始按钮打开。WinX菜单提供了一些常用的操作和快捷方式,比如打开电源选项、控制面板等等,用户也可以对WinX菜单进行自定义,以添加自己经常使用的程序或文件。 二…

    other 2023年6月25日
    00
  • 教你如何搭建一个时间服务器

    教你如何搭建一个时间服务器 搭建一个时间服务器可以为其他设备提供准确的时间,并且也是网络环境下进行时间同步的必要条件。本文将详细介绍如何搭建一个简单的时间服务器。 步骤一:选择操作系统 选择一个稳定可靠的操作系统非常重要。在本教程中,我们将选择使用 Ubuntu 20.04 LTS 作为我们的时间服务器的操作系统。 步骤二:安装 NTP 服务 NTP (Ne…

    other 2023年6月27日
    00
  • idea2020.2激活码

    以下是获取Idea 2020.2激活码的完整攻略,包含两个示例: 步骤1:下载Idea 2020.2 首先,下载Idea 2020.2。您可以从JetBrains官网下载Idea 2020.2的安装程序。 步骤2:安装I2020.2 安装Idea 2020.2的过程与安装其他软件的过程类似。您只需要按照安装的指示进行操作即可。 步骤3:获取激活码 以下是获取…

    other 2023年5月6日
    00
  • modelandview重定向

    ModelAndView重定向 在Spring MVC中,我们经常需要进行重定向,这时就需要用到ModelAndView重定向。 ModelAndView简介 先来了解一下什么是ModelAndView。在Spring MVC中,Controller的处理结果需要在View中进行展示,而ModelAndView就是一个封装了Model和View的类。其中,M…

    其他 2023年3月28日
    00
  • 服务端配置实现AJAX跨域请求

    要实现AJAX跨域请求,需要在服务端进行配置。以下是实现AJAX跨域请求的完整攻略: 步骤一:使用CORS(跨域资源共享) CORS(Cross-Origin Resource Sharing)是W3C标准,用于跨域请求资源。通过CORS的配置,服务端允许客户端跨域访问资源。在服务端的响应头中添加如下代码即可实现CORS: Access-Control-Al…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部