泛型-限定存储数据类型

泛型

  • 泛型的本质:参数类型化

  • 概述:将类型由原来的具体的类型参数化,然后在 使用/调用 时传入具体的类型

  • 格式:

    • <类型>
      • 指定一种类型的格式,这里的类型可以看成是 方法中的形参(如果不理解可去看下形参和实参)
      • 并且 类型 只能是 引用类型,不能是基本数据类型
  • 好处:

    • 把运行时期的问题提前到了编译期间

      import java.util.ArrayList;
      import java.util.Collection;public class Test{// 遍历集合public static void show(Collection co){for(Object c : co){System.out.println(c);}}public static void main(String args[]){// 1、创建集合对象,Collection 是接口,所以创建对象只能用其子类实现类Collection c = new ArrayList();// 2、添加元素c.add(1);c.add("张三");c.add(true);// 3、遍历集合show(c);}
      }
      

      注意:我们可以看到,此时的 Collection 集合可以添加任意数据类型,但是大家思考一个问题,集合中存储不同数据类型,是否会影响我们后期对于集合中数据的操作呢?答案是肯定的,怎么解决呢,我们就可用到泛型。

      这样,我们就可以将 问题 提前到了 编译期间!

    • 避免了强制类型转换


泛型类

  • 格式: 修饰符 class 类名<参数类型>{}

    // 学生泛型类
    class Student<T>{private T value;					// 定义私有变量public Student(T value){this.value = value;}public T getValue(){return value;}public void setValue(T value){this.value = value;}
    }
    // 测试类
    public class Test1{public static void main(String args[]){// 这里的 <> 中 String 和 Integer 是实参,T 是形参Student<String> s1 = new Student<String>("张三");Student<Integer> s2 = new Student<Integer>(1);System.out.println(s1.getValue() + " " + s2.getValue());}
    }
    

    最终运行结果:张三 1


泛型方法

  • 格式:修饰符 <类型> 返回值类型 方法名(类型 变量名){}

    class Cat{// 泛型方法public <T> T show(T t){return t;}
    }
    public class Test{public static void main(String args[]){// 1、创建对象Cat t = new Cat();// 2、调用泛型方法,传入不同的参数String s = t.show("张三");int i = t.show(1);System.out.println(s + " " + i);}
    }
    

    最终运行结果:张三 1


泛型接口

  • 格式:修饰符 interface 接口名 <类型>{}

    interface Animal<T>{// 抽象方法public void show(T t);
    }// 实现 泛型接口
    class Dog implements Animal<String>{@Overridepublic void show(String s) {System.out.println(s);}
    }public class Test{public static void main(String[] args) {Dog d = new Dog();d.show("李四");}
    }
    

类型通配符

  • 类型通配符:<?>

  • 例如:List<?>:表示元素类型未知的List,他的元素可以匹配任何的类型

    这种带通配符的List仅表示它是各种泛型的List的父类,并不能把元素添加到其中

    范围格式举例作用
    任意类型<?>List<?>表示的类型是所有
    上限<? extends 类型>List<? extends Number>表示的类型是Number或者其子类
    下限<? super 类型>List<? super Number>表示的类型是Number或者其父类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink窗口与WaterMark

本文目录 窗口的生命周期Window Assigners窗口函数&#xff08;Window Functions&#xff09;TriggersEvictorsAllowed Lateness 窗口 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中&#xff0c;再对每个“桶”加以处理。…

域名流量被劫持怎么办?如何避免域名流量劫持?

随着互联网不断发展&#xff0c;流量成为线上世界的巨大财富。然而一种叫做域名流量劫持的网络攻击&#xff0c;将会在不经授权的情况下控制或重定向一个域名的DNS记录&#xff0c;导致用户在访问一个网站时&#xff0c;被引导到另一个不相关的网站&#xff0c;从而劫持走原网站…

企微私域流量引流:从策略到实践的全面解析

随着互联网的发展&#xff0c;流量变得越来越贵&#xff0c;如何将流量转化为企业的价值成为了重要的议题。在这个背景下&#xff0c;企微私域流量成为了企业关注的焦点。本文将从策略和实践两个角度&#xff0c;全面解析企微私域流量的引流方法。 一、策略篇 1. 明确目标&…

maven pom.xml 加载本地.jar库文件方法

一般我们使用的jar包,都是从maven仓库中加载的, 那如果是从本地该如何加载呢? 本文介绍maven加载本地jar的方法 在 pom.xml 的 dependencies 节点内增加以下配置即可 <dependency> <groupId>cn.tekin</groupId> <artifactId>mylib</artifactI…

leetcode:908. 最小差值 I

一、题目 二、函数原型 int smallestRangeI(int* nums, int numsSize, int k) 三、思路 本题题目有些绕口&#xff0c;但是无伤大雅。本质就是可以对数组中的每个元素进行加/减 k 的操作&#xff0c;然后求数组中的最大、最小元素的最小差值。 分为几种情况&#xff1a; …

怎么查询网络出口IP

怎么查询自己的网络的出口IP 背景 一般跟第三方服务进行接口数据交互的时候&#xff0c;对方都会让我们提供调用接口的网络的出口IP&#xff0c;对方会把该IP地址加到对方的白名单中。这样我们才能有权限进行接口的访问。 解决办法 下面介绍三种常用的查询网络出口IP的办法…

C语言编译器(C语言编程软件)完全攻略(第二十九部分:Linux GCC简明教程(使用GCC编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 二十九、Linux GCC简明教程&#xff08;使用GCC编写C语言程序&#xff09; 市面上常见的 Linux 都是发行版本&#xff0c;典型的 Linux 发行版包含了 Linux 内核、桌面环境&#xff08;例如 GNOME、KDE、Unity 等&#xff09;和各种…

[Verilog语言入门教程] 乘法器详解 与 设计/仿真

依公知及经验整理,原创保护,禁止转载。 专栏 《Verilog》 <<<< 返回总目录 <<<< 乘法器可以分为以下5种类型: 顺序乘法器(Sequential Multiplier):顺序乘法器是最简单的乘法器类型,采用逐位相乘的方法实现。这种乘法器适用于小规模的乘法运算…

go构建项目与打包

环境搭建 使用的组件及版本 operator-sdk v1.22.0go 1.20.0 linux/amd64git 1.8.3.1k8s 1.18.5docker 20.10.5 前期配置 安装Git yum install git安装docker yum install docker-ce安装go 官网下载 tar -C /usr/local/ -xvf go1.20.linux-amd64.tar.gz 环境配置 // 将go配置…

【赠书第16期】码上行动:用ChatGPT学会Python编程

文章目录 前言 1 ChatGPT简介 2 Python编程简介 3 使用ChatGPT学习Python编程 4 如何使用ChatGPT学习Python编程 5 推荐图书 6 粉丝福利 前言 随着人工智能技术的不断发展&#xff0c;聊天机器人已经成为我们日常生活和工作中不可或缺的一部分。其中&#xff0c;ChatGP…

HarmonyOS@Extend装饰器:定义扩展组件样式

Extend装饰器&#xff1a;定义扩展组件样式 在前文的示例中&#xff0c;可以使用Styles用于样式的扩展&#xff0c;在Styles的基础上&#xff0c;我们提供了Extend&#xff0c;用于扩展原生组件样式。 说明 从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。…

静态网页设计——红旗汽车官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1gK411x7Bg/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

git克隆失败提示RPC failed的解决方法

现象 $ git clone https://github.com/guillemj/dpkg.git Cloning into dpkg... remote: Enumerating objects: 113312, done. remote: Counting objects: 100% (18045/18045), done. remote: Compressing objects: 100% (3915/3915), done. error: RPC failed; curl 18 trans…

在Uniapp中使用Echarts创建可视化图表

在uniapp中可以引入echarts创建数据可视化图表。 1. 安装Echarts 使用npm安装echarts插件&#xff0c;命令如下&#xff1a; npm install echarts --save2. 引入Eharts 在需要使用Echarts的页面引入&#xff1a; import *as echarts from echarts3. 创建实例 创建画布元素…

跟我用路由器学Linux编程 - 专栏目录

专栏文章目录 序言 本专栏文章以梅林、openwrt等linux路由为基础硬件&#xff0c;和笔者一起学习使用shell语言。带你从编写简单的插件开始&#xff0c;学习怎么折腾路由器&#xff0c;顺便学会编程。专门找一台Linux主机用来学习很不容易&#xff0c;但软路由用的都是Linux基…

三极管组成的光控开关电路原理图

什么是光控开关 光控开关/光控时控器采用先进的嵌入式微型计算机控制技术&#xff0c;融光控功能和普通时控器两大功能为一体的多功能高级时控器&#xff08;时控开关&#xff09;&#xff0c;根据节能需要可以将光控探头&#xff08;功能&#xff09;与时控功能同时启用&…

【51单片机】LED灯的进阶操作(闪烁、流水)

上篇文章我们讲到了Keil5与STC的使用方式点亮第一个LED灯 这篇将继续进行一些LED灯的进阶操作 目录 LED灯闪烁&#xff1a;LED流水灯普通LED流水灯LED流水灯PLUS LED灯闪烁&#xff1a; 上文我们说只要通过P2这个寄存器就可以控制LED亮灭&#xff0c;现在我们要将其变为闪烁状…

React基础应用及常用代码

目录 基础知识 babel.config.js js,html,css,Vue,react,angular,nodejs,webpack,less,ES6,commonjs等的关系 ECMAScript 6&#xff08;ES6&#xff09; let、const、var 的区别 Webpack、npm、node关系 props和state区别 通用框架类 ES 6 export React React.Fragm…

pyparamvalidate 重构背景和需求分析

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、重构背景三、需求分析三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 param_validator 常用校验器的实现 3、本节目…

前端算法之堆 -- 计数排序

堆用于解决什么问题 堆排序&#xff08;Heap Sort&#xff09;&#xff1a;优先队列&#xff08;Priority Queue&#xff09;&#xff1a;图算法中的最短路径和最小生成树问题&#xff1a;中位数查找&#xff1a;合并K个有序数组&#xff1a; 例子&#xff1a;库存管理 III On时…