我跟女朋友说:“三分钟带你秒懂Java泛型!”女朋友直呼:“太快了!”

【Unity】【2D】用连续图片生成动画Animation的简明步骤 本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。 阅读详情

在这里插入图片描述

1、定义

什么是泛型,看表面的意思,泛型就是指广泛的、普通的类型。在java中是指把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型。
可一看一个简单的例子:

List<String> strings = new ArrayList<String>();
strings.add("a String");
String aString = strings.get(0);

可以看到,通过菱形语法(’<>’)可以将List内元素的类型限定为String类型。
需要注意的是<>内的类型只能是引用类型,当然对于基本类型,可以使用对应的包装类型。

2、使用泛型的好处

(1)首先就像上面那个例子一样,使用泛型能够限定集合中,如List, Set中元素的类型,保证一个集合中只有一个类型。(这样也就能够使用增强for来遍历集合)
(2)程序也能更加健壮(只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常)

3、泛型的基础

(1)泛型类

泛型类也就是把泛型定义在类上,这样用户在使用类的时候才把类型给确定下来。

public class ObjectTool<T> {
    private T obj;

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }
}

可以看到上面这个程序,在使用时如果定义了类型,那么在使用时就可以不用进行强制类型转换,直接就可以得到一个T类型的对象。

(2)泛型方法
有时候只关心某个方法,那么使用泛型时可以不定义泛型类,而是只定义一个泛型方法,如下

 public <T> void show(T t) {
        System.out.println(t);
    }

需要注意一下定义的格式,泛型必须得先定义才能够使用。

(3)继承关系
泛型类在继承时,可以明确父类(泛型类)的参数类型,也可以不明确。
现在我们有如下的泛型类
//泛型类

public interface Inter<T> {
    public abstract void show(T t);
}

①明确类型
//在实现泛型类时明确父类的类型

public class InterImpl implements Inter<String> {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

②不明确类型

public class InterImpl<T> implements Inter<T> {

    @Override
    public void show(T t) {
        System.out.println(t);
    }
}

4、类型通配符

(1)无界
类型通配符我感觉上和泛型方法差不多,只是不用在使用前进行定义,例子如下:

public void processElements(List<?> elements){
   for(Object o : elements){
      System.out.println(o);
   }
}

"?"可以接收任何类型。
(2)上界

public void processElements(List<? extends A> elements){
   for(A a : elements){
      System.out.println(a.getValue());
   }
}

这种情况下能够接收A类或者A类的子类。
(3)下界

public static void insertElements(List<? super A> list){
    list.add(new A());
    list.add(new B());
    list.add(new C());
}

这种情况下能够接收A类或者A类的父类

(4)类型通配符和泛型方法

我认为这两种方式是差不多的,不过在使用时,如果参数之间是有依赖关系的,那么可以使用泛型方法,否则就使用类型通配符。(如果一个方法的返回值、某些参数的类型依赖另一个参数的类型就应该使用泛型方法,因为被依赖的类型如果是不确定的?,那么其他元素就无法依赖它)。

(5)开发相关

泛型通配符< ? extends T >来接收返回的数据,此写法的泛型集合不能使用 add 方 法, 而< ? super T >不能使用 get 方法,做为接口调用赋值时易出错。

这个怎么来理解呢,当我们使用extends时,我们可以读元素,因为元素都是A类或子类,可以放心的用A类拿出。
当使用super时,可以添加元素,因为都是A类或父类,那么就可以安全的插入A类。

泛型就是这么简单。

PCL 欧式聚类(C++详细过程版) 为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。 阅读详情

相关推荐

Ubuntu20.04运行Vins-fusion

因已安装ROS noetic,eigen,opencv及ceres等库,这部分环境配置就不细讲,直接下载VINS-FUSION的代码库 下载编译 cd ~/vins-fusion/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd ../ catkin_make source ~/catkin_ws/devel/setup.bash 编译时会发现一堆错误,别急,无非就是环境冲突问题,一个个解决 1)首先,ROS

xiaojinger_123的博客 1万+

什么是泛型?

泛型:就是指在类定义时不会设置类中的属性或方法参数的具体类型,而是在类使用时(创建对象)再进行类型的定义。会在编译期检查类型是否错误。

m0_49991895的博客 3万+

nRF24L01模块性能调优笔记:基于STC8H的SPI通信,如何突破700包/秒的传输瓶颈?

本文详细介绍了如何通过SPI通信优化、nRF24L01寄存器配置和STC8H系统级调优,突破700包/秒的传输瓶颈。从硬件设计到软件实现,提供了一套完整的性能调优方案,特别适合需要高性能无线通信的嵌入式开发者。

weixin_42525211的博客 182

泛型的详解

泛型的使用

qq_48747560的博客 3728

覆冰监测系统服务器,基于分布式光纤振动传感的电缆覆冰舞动监测系统

监测意义我国高压输电网络已经形成了全国联网的格局,总规模世界第一。2018年底,全国发电装机容量已达19.0亿千瓦,全国 220kV及以上输电线路回路长度超过71万公里。我国电力能源集中在西北,而用户则集中在华东华南,所以高压输电网络的特点是长距离,大跨度,途径的自然环境多种多样。在高湿高寒的恶劣环境中,输电线非常容易发生覆冰舞动事故,由于覆冰形成的规则的非圆断面的缆线在风的激励下形成谐振,造成低...

weixin_32566055的博客 1548

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5463

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?...

1016

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 884

什么是泛型

什么是泛型

程序员思维的博客 2940

MySQL操作之用户管理权限管理:(DC)(五)

一、简介 二、用户管理 2.1 User表 2.2 创建普通用户 2.3 删除普通用户 2.4 修改用户密码 2.5 解决root用户密码丢失 三、权限管理 3.1 MySQL的权限 3.2 授予权限 3.3 查看权限 3.4 收回权限

lydms的博客 4509

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1007

Java基础——泛型

泛型(Generics)是一种在编程时定义函数、类或接口时不具体指定将要操作的数据类型的方法。通过使用泛型,可以编写出更加通用、灵活且类型安全的代码。泛型允许在编译时进行类型检查,从而减少运行时错误,并提高了代码的可重用性和可读性。泛型就好比是给一个标签,就拿数组的泛型举例来说,我们把数组比作一个药瓶子,我们药瓶子贴上了什么标签,就放什么药,如果不管什么药都放在一个药瓶子里,那不得出大事吗?同样容器写上什么泛型,就存放什么数据;

2301_78566776的博客 1894

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是泛型,泛型在实际项目中如何高度使用?

guest: [],递归泛型适合处理树形结构或动态嵌套的数据类型。泛型提供了灵活的类型参数化能力,适配不同的数据场景。内置辅助类型为复杂的类型操作提供了便捷。高阶泛型在结合辅助类型后,能够动态推断、转换或生成类型结构,解决复杂的业务需求。

qq_39279448的博客 1415

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java 中的泛型(超全详解)

泛型的出现就是为了统一集合当中数据类型的尖括号 <> 中的 泛型标识被称作是类型参数,用于指代任何数据类型。T :代表一般的任何类。E :代表 Element 元素的意思,或者 Exception 异常的意思。K :代表 Key 的意思。V :代表 Value 的意思,通常与 K 一起配合使用。S :代表 Subtype 的意思,文章后面部分会讲解示意。自己实现集合/*E: 表示不确定的类型,该类型在类名后面已经定义过了e: 形参的名字,变量名*/

weixin_65752158的博客 3万+

jre9下载 jdk9

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

泛型的讲解

泛型的讲解

yyhgo_的博客 2495

什么是泛型?- 泛型入门篇

目录1、什么是泛型?2、泛型是怎么编译的泛型的编译机制:擦除机制 1、什么是泛型? 泛型其实就是将类型作为参数传递,泛型允许程序员在编写代码时使用一些以后才指定的类型 ,在实例化该类时将想要的类型作为参数传递,来指明这些类型。 为什么要引入泛型? 例如:自己实现一个顺序表 public class MyArrayList { public int[] elem; public int usedSize; public MyArrayList() { this.ele

qq_45792749的博客 3287

泛型(基础、通俗易懂)

泛型的基本了解

m0_65013820的博客 889

泛型总结(通俗易懂)

泛型 1,什么是泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参), 然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分

qq_52880445的博客 2万+

Java 中的泛型

一、泛型概述1. 什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数。在调用普通方法时需要传入对应形参数据类型的变量(实参),若传入的实参与形参定义的数据类型不匹配,则会报错。那参数化类型是什么?以方法的定义...

cnzzs的博客 740

Java泛型详解

泛型(Generics)是Java 5引入的一个重要特性,它允许类、接口和方法操作未知类型的对象。通过使用泛型,我们可以编写更加通用、类型安全的代码,同时保持代码的简洁性和可读性。泛型本质上是一种"代码模板",它使用类型参数来表示类型,这些类型参数可以在实际使用时被实际的类型替换。这样,一份代码可以适用于多种不同的数据类型,而不需要为每种数据类型编写单独的实现。简单来说,泛型就是允许我们在定义类、接口和方法时使用类型参数(type parameters),这些类型参数稍后会被用来指定具体的类型(实际类型参数

yk_dflkg的博客 1429

什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的

1. 泛型的定义和意义 什么叫泛型?泛型,顾名思义就是广泛的类型,专业术语为“参数化类型”;当我们创建对象时不指定类型,任何引用类型都可以放入该对象,如果是基本类型,需要使用对应的包装类,兼容多种数据类型,如下图。 但是指定类型后,只能将特定类型放入该对象,如下图,指定String类型后,整型数据就不能使用,此时是类型安全的,同时可使用增强for进行遍历。 2. 泛型的使用和工作原理 2.1 泛型类的自定义及使用 泛型类的定义如下图,创建对象时不指定类型,可以传入不同的类型参数,但是.

走过路过不要错过 1352

什么是泛型,怎么使用泛型分析

1、泛型 1:什么是泛型? 泛型就是广泛的类型,也是一种数据类型,而这种数据类型可以是任意类型,编写过程中当中不能确定类型,创建对象时必须指定具体类型,不指定也可以,但是会出现一些错误。 泛型是编译器行为,只能在编译期有效,如果能够跨过编译器,那么泛型就没有任何意义了。 2、泛型类 怎么定义泛型类? 在类后面加<&g...

weixin_42371832的博客 2873

泛型(了解泛型)

List<E>:这里的<E>就是泛型标志,Map<K,V>这里<K,V>也是泛型标记。泛型:就是类再定义时无法确认类中成员的类型(属性,方法),而是类再创建时指定具体的数据类型。

li410522的博客 903
下一篇: 自学Java如何入门?看完教你秒懂Java接口 抽象类区别!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值