搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
不正经
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
常用 Git 命令清单
2
如何搭建Java开发环境——JDK的安装与配置_第1关:配置开发环境 - javajdk的配置
3
c语言链表实现_c语言实现链表
4
kafka扩容和分区重新分配_kafaka空间扩容
5
用matlab实现Dijkstra算法,内附函数详解_dijkstra matlab
6
N皇后问题(Java深度优先递归解法)_n皇后问题java
7
commonjs vs ES module in Node.js_annotate the commonjs export names for esm import
8
全网最好玩的谷歌相机AGC8.4版本,体验70合一的拍照快感_谷歌相机70合1
9
AIGC:让传统农村小型作坊焕发新能量
10
Python 异常的传递性_python的异常传递
当前位置:
article
> 正文
Java泛型
作者:不正经 | 2024-06-01 20:20:02
赞
踩
Java泛型
一、泛型引入
1、引入:
1、在使用集合时,不能对加入到集合中的元素类型进行约束,因为集合里面的元素类型为Object。
2、遍历集合时,需要进行类型转化,如果数据量比较大,那么对效率有影响。
2、说明:
泛(广泛)型又称参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题。
在类声明或实例化时,只需要指定好需要的具体类型即可。
可以在类声明时通过一个标识来表示类中某个属性的类型,或者某个方法的返回值类型,或者参数类型。
泛型的声明:
interface接口<T>{}
class类<K,V>{}
<>内的字母没有限制,且实例化时,只能为引用类型,不能是基本数据类型。
一般:
E
- Element (在集合中使用,因为集合中存放的是元素)
T
- Type(Java 类)
K
- Key(键)
V
- Value(值)
N
- Number(数值类型)
?
- 表示不确定的 java 类型
比如:接口List和类HashMap
例如:
Test为一个泛型类,在类声明中出现<E>,在类中就可以使用。
然后Show()方法为一个泛型方法
注意,在定义Test类对象stringTest时制定了E的数据类型,在编译期间,就确定了E的类型。
基本原理:
泛型本质是将数据类型参数化,它通过擦除的方式来实现。
声明了泛型的 .java 源代码,在编译生成 .class 文件之后,泛型相关的信息就消失了。
可以认为,源代码中泛型相关的信息,就是提供给编译器用的。泛型信息对 Java 编译器可以见,对 Java 虚拟机不可见。
Java 编译器通过如下方式实现擦除:
用 Object 或者界定类型替代泛型,产生的字节码中只包含了原始的类,接口和方法;
在恰当的位置插入强制转换代码来确保类型安全;
在继承了泛型类或接口的类中插入桥接方法来保留多态性。
详情:
Java 中泛型的实现原理 - 博客园
3、细节
1.<>内部的T或E等只能是引用类型,不能是基本数据类型。
2.在指定了泛型的具体类型之后,可以传入该类型或该类型的子类类型。
3.泛型使用形式:
①正常模式:List<Integer> list = new ArrayListList<Integer>();
②
简化模式,实际开发中使用这种:
编译器会使用类型推断,可以省略后面<>内部的类型。
List<Integer> list = new ArrayListList<>();
③List list = new ArrayList();
这样写,泛型默认为Object。
二、自定义泛型
1、自定义泛型类
语法:
class 类名<T、R......>{//可以定义多个
}
使用细节:
1.普通成员可以使用泛型(属性、方法)
2.使用泛型数组,不能初始化。
因为在new的时候,不知道泛型具体类型,不知道开辟多大的空间。
3.静态方法中,不能使用类的泛型。
因为静态方法和类无关,未创建对象(即未指定泛型具体类型)便可以使用。
所以不指定类型则无法使用,因此静态方法不能使用类的泛型。
4.泛型类的类型,是在创建对象时确定的(创建对象时,需要指定类型,没有指定则默认为Object)。
2、自定义泛型接口
语法:
interface 接口名<T、R....>{//可以定义多个
}
使用细节:
1.静态成员不能使用泛型。
2.泛型类型的接口,在继承接口或实现接口时确定,没有指定默认为Object。
3、自定义泛型方法
语法:
修饰符 <T、R...>返回类型 方法名(参数列表){
}
细节:
1.可以定义在普通类中,也可以定义在泛型类中。
2.方法被调用时,类型就会确定。
3.public void fun(E e){}
这是使用了泛型
不是泛型方法,因为修饰符后面没有泛型列表
三、例子
class A<T,R,M> {
public <E> void f(E e){//正确,这是泛型类
System.out.println(e.getClass().getSimpleName());
}
public void h(U u){}//错误,U并未定义
public void M(M m){}//正确,使用了泛型的方法
}
class Dog{}
psvm(){
A<String,Double,Integer> a = new A<>();
a.f(10);//自动装箱,输出Integer
a.f(new Dog);//输出Dog
}
四、泛型的继承和通配
1.泛型不具备继承性
List<Object> list = new ArrayList<String>();
//这是错误的,虽然String 时Object的子类,但是不能这样写,但可以直接赋值String。
2.<?>
支持任意泛型类型
3.<? extends A>
支持A类以及A类的子类,规定了泛型的上限。
4.<? super A>
支持A类以及A类的父类,不限于直接父类,规定了泛型的下限。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/不正经/article/detail/659280
推荐阅读
article
Java
Apache
Pdf
Box
长单页
Pdf
转图片模糊
解决方案
_renderimagewit...
Using fallback XXX for CID-keyed font STSong-Light,指系统中没有安装S...
赞
踩
article
java
开源
项目
(
大
汇总)_
java
开源
项目
...
Spring Framework 【Java
开源
J2EE框架】 Spring是一个解决了许多在J2EE开发中常见的问题...
赞
踩
article
Github
上优秀
的
Java
项目
推荐_
github
优秀
java
开源
项目
...
即使是面试跳槽,那也是一个学习
的
过程。只有全面
的
复习,才能让我们更好
的
充实自己,武装自己,为自己
的
面试之路不再坎坷!今天...
赞
踩
article
java
毕业设计
——基于
java
+
springboot
+微信小
程序
的短
视频
社交
平台
设计与实现(毕业...
如今,短
视频
社交
已经成为当前最热门的一种
社交
方式,基于安卓或者苹果
平台
开发的短
视频
社交
软件依然存在一些问题,例如占用用户...
赞
踩
article
java
项目
部署到
linux
服务器
,微信小程序后台
springboot
项目
部署到腾讯云
服务器
_微信小...
最全的Linux教程,Linux从入门到精通。_微信小程序-
java
springboot
项目
微信小程序-
java
sp...
赞
踩
article
微信
小
程序
开发【前端+
后端
(Java)】_
小
程序
查询
java
后端
...
其实也不算什么申请,在购买域名之后可以申请免费的ssl证书,在前面的配置文件application.properties...
赞
踩
article
java
kafkastream
_
Kafka
实战:(五)
Kafka
Stream
API
实现...
案例一:实现topic之间的流传输一、
Kafka
Java代码创建maven过程,导入以下依赖org.apache.ka...
赞
踩
article
Github
上热门的
Spring
Boot
项目
实战推荐_
github
java 推荐开发
项目
代...
最近经常被读者问到有没有
Spring
Boot
实战
项目
可以学习,于是,我就去
Github
上找了 10 个我觉得还...
赞
踩
article
java
web
集成
log
_JavaWeb项目架构之
Kafka
分布式
日志
队列...
架构、
分布式
、
日志
队列,标题自己都看着唬人,其实就是一个
日志
收集的功能,只不过中间加了一个
Kafka
做消息队列罢了。ka...
赞
踩
article
arm
java
性能
怎么样
,直接比较
ARM
和
x86
处理器
的
时钟频率有多公平?...
以下是我
的
32位GCC基准测试
的
比较 - 在我
的
网站上阅读更多::它们表示Android系统(Atom原生英特尔代码),...
赞
踩
article
7
年
Java
后端
,
一路
北漂
,
一路
心酸...
7
年
Java
后端
,
一路
北漂
,
一路
心酸今天分享一位同行的经历:本人
Java
开发6年半不到
7
年的样子。英语专业
,
临毕业...
赞
踩
article
混淆打包出现
java
.
io
.IOExcep
t
io
n: Can'
t
wri
t
e
、Can'
t
read...
项目需要混淆打包签名,但是之前不清楚包的重复引用问题,然后再签名的时候出现
io
异常的问题,找了很久,把多余重复引用的包去...
赞
踩
article
【
java
深入学习第4章】掌握
Java
微
服务
:
Spring
Boot
和
Spring
Clou...
免费在现代软件开发中,微
服务
架构因其灵活性和可扩展性而备受青睐。本文将探讨
Java
微
服务
架构中的
关键技术
和设计原则,并通...
赞
踩
article
工作十年,分享看过的优质
Java
书籍
_
10
年
java
看些
什么
...
不知不觉,我已经接触
Java
11 年了——从 2008 年北京奥运会那年开始,到现在;未来还会更久。这期间我读了不少...
赞
踩
article
《
Effective
java
》—–
读书
笔记
_
effect
java
读书
...
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习、看书,努力提升自己!...
赞
踩
article
《
Effective
Java
》中文版
第
3版
读书笔记
_
effective
java
第
三版 中文...
人真的不必逼自己去做不像自己的那种人,强大固然是好,但脆弱和柔软也没有什么过错。一个人不用活得像一支队伍,一个人只要活得...
赞
踩
article
华为
OD机试 -
生成
哈夫曼
树(
Java
& JS &
Python
&
C
&
C
++)_
生成
哈夫...
华为
OD机试 -
生成
哈夫曼
树(
Java
& JS &
Python
&
C
&
C
++),考察:
哈夫曼
树的构建_
生成
哈...
赞
踩
article
java
整合
neo4j
5.9.0
简单
使用_
java
整合
neo4j
...
删除了@RelationshipEntity注解,变成了@Relationship,type是关系名称,比如。由于查到的...
赞
踩
article
Java
【
数据结构
】 哈希(
Hash
超详解)
Hash
Set&
Hash
Map【神装】_
java
的ha...
哈希桶机制通过将冲突的元素组织在一起,而非直接覆盖,保证了哈希表的灵活性和高效性。它允许哈希表在面对大量数据时仍能保持较...
赞
踩
article
springboot
整合
neo4j
-使用原生
cypher
Java
API
_
springboot
n...
对
neo4j
的操作是业务数据对象无关的,不管是什么样的节点数据或关系数据均可以操作。(就是你的
Java
bean对象,比...
赞
踩
相关标签
java
pdf
开发语言
github
课程设计
spring boot
服务器
linux
微信小程序
前端
java kafkastream
java web 集成log
arm java 性能怎么样
北漂
程序员
架构师
学习
微服务
Java
书籍