java泛型概念与通配符含义初探

Java 泛型使用通配符 ArrayList<?泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。使用泛型时,泛型类型必须为引用数据类型,不能为基本数据类型,Java中的普通方法,构造方法,静态方法中都可以使用泛型,方法使用泛型之前必须先对泛型进行声明,可以使用任意字母,一般都要大写。在引入范型之前,要在类中的方法支持多个数据类型,就需要对方法进行重载,在引入范型后,可以解决此问题(多态),更进一步可以定义多个参数以及返回值之间的关系。 阅读详情

一般类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用与多重类型的代码,这种刻板的限制对代码的束缚就会很大。

泛型的概念:
泛型实现了参数化类型的概念,使代码可以应用于多重类型。“泛型”这个术语的意思是:适用于许多许多的类型。泛型在编程语言中出现时,其最初的目的是希望类或方法能够具备最广泛的表达能力。
泛型的类型擦除:
java泛型是用擦除来实现的,这意味着当你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的就是你在使用一个对象。例如List<String>和List<Integer>在运行时事实上是相同的类型,这两种形式都被擦除成他们最"原生"类型,即List。泛型只在编译阶段有效,泛型类型在逻辑上可以看成是多个不同的类型,但是其实质都是同一个数据类型,编译之后,程序会才去去泛型化措施。

**

泛型通配符<? 继承 ?>的分类与含义:

**
泛型类型参数将擦除到它的第一个边界。

1、无边界通配符
<?> 通配符理解
我们知道ArrayList 是典型的泛型类.即可以限制存储的元素的元素类型.ArrayList<String>指定存入的元素时string. ArrayList<Integer>指定存储元素为Integer类型. 但是如果只有我们使用的时候才能明确知道存入类型时.我们可以使用ArrayList<?> 来表示通用的类型.

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>();
    list1.add("zhangsan");
    List<Number> list2 = new ArrayList<>();
    list2.add(3);
    list2.add(4);
    loop(list1);
    loop(list2);
}

public static void loop(List<?> list){
    for (int i = 0 ; i < list.size() ; i++) {
        System.out.println(list.get(i));
    }
}

案例中的 ? 代表着限定通用类型. 或者这么理解.代表可变的参数类型

2、上界通配符
<? extends Number > 代表参数是从Number往下的子类或者孙类对象都是可以的.
在这里插入图片描述
3、下界通配符
<? super Integer> 代表从Integer 到 Object 所有对象都是可以的。
在这里插入图片描述

草草总结下当前的理解,欢迎指正问题与补充理解方式!

Java泛型&通配符 Java 泛型(Generics)是 JDK 5 引入的一个新特性,它提供了编译时类型安全检测机制,允许在编译时检测出非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型擦除是指在编译过程中,Java 编译器会将泛型类型信息擦除,将泛型类型转换为原始类型(Raw Type),也就是去掉泛型参数的类型信息,使得在运行时无法获取泛型的实际类型参数。例如,编译器会在编译期间动态地将泛型 T 擦除为 Object 或将 T extends xxx 擦除为其限定的类型 xxx。 阅读详情

相关推荐

STM32G0——USB虚拟串口

STM32G0用cubeMX配置实现USB虚拟串口

阿昌 2320

如何理解Java中的泛型通配符

泛型通配符的作用,通配符上界,通配符下界,List<?>

u014305426的博客 610

Acute逻辑分析仪TL4134E实战:从触发电平到协议解析的完整避坑指南

本文是一份针对Acute逻辑分析仪TL4134E的实战避坑指南。文章深入解析了触发电平分组、采样率与存储深度权衡、高级触发等核心概念,并提供了混合电压系统测量、eMMC调试内存优化、SPI/I2C/UART协议解析排错等具体配置技巧,帮助硬件工程师和嵌入式开发者高效捕获与分析数字信号,快速定位通信问题。

weixin_29207149的博客 404

Java8语法糖List<Integer>,List<String>,List<Long>,String之间互转

Java8语法糖List,List,List,String之间互转

netuser1937的博客 2574

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

weixin_44240228的博客 1万+

Halcon实战:5分钟搞定灰度图转热力图(附完整代码)

本文提供了一份Halcon实战指南,详细讲解如何在5分钟内将灰度图转换为直观的热力图。通过核心代码演示了利用HSV颜色模型进行色彩映射的原理与步骤,包括图像归一化、通道构建与空间转换,并附赠了深度图可视化等进阶应用技巧,帮助工程师快速提升图像分析效果。

weixin_29240343的博客 282

Java编程思想 第十五章 泛型

无

name_sakura的博客 681

STM32入门教程:WiFi通信

STM32是一款强大的嵌入式系统开发平台,可以用于开发各种应用程序,包括WiFi通信。在本教程中,我们将介绍如何使用STM32开发板和WiFi模块进行无线通信。以下是一个详细的代码案例,涵盖了WiFi通信的基本概念和实现。

qq_67153941的博客 1348

理解JAVA泛型,看这一篇

文章目录前言一、为什么使用泛型?二、泛型标记三、泛型使用3.1泛型方法3.2泛型类3.3泛型接口四、对泛型上限的限定五、对泛型下限的限定六、类型擦除总结 前言 在JAVASE的集合章节已经简单介绍了泛型的概念以及基本使用,本章将继续讲解有关泛型的内容,包括泛型上下限的限定以及类型擦除等内容。 一、为什么使用泛型? 在不使用泛型的情况下我们可以通过引用Object类型来实现参数的任意化,因为Object是所有类的父类。 但是我们仔细想想这样做的话有什么后果? 具体使用时需要进行强制类型转换(父类转成子类)

qq_52173163的博客 1162

使用GitLab的VS Code插件 GitLab Workflow 来进行项目的DevOps管理,助力研发效能

使用VS Code的GitLab Workflow插件,进行项目的DevOps管理,将效率提升到MAX。直接在VScode中管理流水线,一键跳转到创建 Issues,MR

知无涯 5292

[SV]SystemVerilog学习笔记之struct & union

SystemVerilog学习笔记(四) 一、结构体(struct) 1.1、结构体(struct) 结构体声明:结构体默认是变量,也可以声明为线网 var struct{ //通过var进行结构体变量声明 logic [31:0] a, b; logic [ 7:0] opcode; } Instruction_Word_var; wire struct{ //结构体线网声明,定义为线网类型时,结构体的所有成员必须...

元直的博客 1万+

深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取

泛型的本质是参数化类型,相比于直接使用 Object 的好处是:编译期强类型检查、无需进行显式类型转换。这里介绍一些泛型的用法、特性,以及如何在运行时获取泛型参数类型信息。

albon arith 3880

IC 笔试真题之吾见——华为实习(1)

前言 今天(2022 04 07)刚建立了一个专栏《IC真题之吾见》,准备记录一些IC真题的见解,为以后找工作做一点准备。 刷题绝不是目的,以题代练,以题代学。 题目来自师兄申请 华为实习“设计”岗位 的笔试真题。 见解大部分来自自己学习的理解,也有部分超纲知识是网络检索得到,希望可以多多在评论区留言交流,共同进步! 有问题的地方也希望可以直接批评指正! 后面也会同步更新此专栏! 1、下列有关时序分析的描述正确的是() A. recovery时间,是指异步控制信号在有效时钟沿到达之后必须保持

记录所学,分享知识,结识挚友 8637

Java泛型 通配符详解

对于<? super 类型>,编译器将只允许写操作,不允许读操作。即只可以设值(比如set操作),不可以取值(比如get操作)。 对于<? extends 类型>,编译器将只允许读操作,不允许写操作。即只可以取值,不可以设值。 以上两点都是针对于源码里涉及到了类型参数的函数而言的。比如对于List而言,不允许的写操作有add函数,因为它的函数签名是boolean add(E e);,此时这个形参E就变成了一个涉及了通配符的类型;而不允许的读操作有get函数,因为它的函数签名是E get(int index)

anlian523的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java泛型方法的定义和使用、泛型类、泛型接口、泛型方法、通配符、泛型的上界与下界

Java泛型方法的定义和使用、泛型类、泛型接口、泛型方法、通配符、泛型的上界与下界

weixin_49114503的博客 6844

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java泛型中通配符的使用详解

?extends T>确定了上界为T,那么获取值时类型一定是T或T的父类,但赋值时由于不能确定具体是T或者T的某个子类而赋值失败。

小鲁蛋的博客 8197

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

泛型通配符详解

为什么要用通配符呢? 在java中,数组是可以协变的,比如dog extends Animal,那么Animal[] 与dog[]是兼容的。而集合是不能协变的,也就是说List<Animal>不是List<dog>的父类,这时候就可以用到通配符了。 一、基本概念: 在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类: 1. 无边界的通配符(Unb...

jarniyy的博客 5468

【Java基础】Java泛型和泛型通配符详解

Java泛型的详解,总结了泛型通配符所有的含义,以及用法,并且说明了各个用法之间的区别。

大脑不能为空 2744

Java 泛型详解:泛型类、泛型方法、泛型接口、类型擦除与类型通配符

本文全面解析Java泛型,这是JDK1.5引入的类型参数化机制,通过`<类型>`语法实现编译期类型安全,运行期经“类型擦除”保障性能。内容涵盖泛型类、方法、接口的定义、语法与实现方式,详解无界、上界、下界通配符的特性与用法,分析类型擦除原理及泛型关键规则(如参数化类型无继承、泛型运行时擦除等)。掌握泛型可提升代码安全、可读性与复用性,是Java开发者进阶必备技能。

Vivian_0682的博客 1547

泛型&通配符

泛型&通配符

weixin_44525733的博客 1553

Java泛型(通配符)

Java泛型通配符 在了解通配符之前,如下知识点的理解对于为何设置通配符有着很好的解释作用。 协变: 不变: 逆变: 更加详细的解释可参考文章:《几个搞不太懂的术语:逆变、协变、不变》 ...

weixin_44298385的博客 4373

在 Java 的泛型类型中使用通配符

Java 从版本5起开始引入泛型(generics)机制。我们知道,Java 的泛型类型如同java.lang.String,java.io.File 一样,属于普通的 Java 类型。比方说,下面两个变量的类型就是互不相同的: List listObj = new ArrayList(); List listStr = new ArrayList(); 虽然 String 是 Object

一个执着的程序员 1万+

Java数据结构基础——泛型、通配符_java通配符和泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。只接受 Number 的子类型作为 E 的类型,实参没有指定类型边界 E,可以视为 E extends Object。实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值。使用Object数组的缺点有二,存放元素时可以存放任何类型的元素,再者,取出元素的时候需要手动强转。因此,Java的泛型机制是在编译级别实现的。注意:泛型时在编译的时候的一种机制,在运行时是没有泛型的概念的。

2401_89734329的博客 1405

【JavaSE系列】Java中的泛型与通配符

本篇文章带大家认识Java语法——泛型与通配符,泛型和通配符是一个非常抽象的概念,简单来说,两者都可以将类型作为“参数”进行传递,不过泛型是在你知道传入什么类型的时候使用的,而通配符是你不确定传入什么类型的时候使用,本文将介绍泛型与通配符的使用及两者间的区别。

未见花闻的博客 916

Java基础之泛型与通配符

Java泛型(Generics 是JDK5引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。

qq_40492693的博客 3261

泛型与通配符

一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。------来源《Java编程思想》对泛型的介绍。 泛型是在 JDK1.5 引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

Tgess的博客 1255
上一篇: Linux中防火墙端口查看,开启与关闭
下一篇: java中this,super,extends,implements相关继承概念讲解
mmm.c
博客等级 码龄9年 117粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值