没有合适的资源?快使用搜索试试~ 我知道了~
Java 基础(4-8) - 泛型机制详解.pdf
需积分: 0 0 下载量 28 浏览量
2023-06-28
20:04:24
上传
评论
收藏 714KB PDF 举报
温馨提示
试读
27页
Java 基础(4_8) - 泛型机制详解
资源推荐
资源详情
资源评论
Java
基
础
(4/8)-
泛
型
机
制
详
解
Java
基
础
-
泛
型
机
制
详
解
Java
泛
型
这
个
特
性
是
从
JDK1.5
才
开
始
加
⼊
的
,
因
此
为了
兼
容
之
前
的
版
本
,
Java
泛
型
的
实
现
采
取
了
“
伪
泛
型
”
的
策
略
,
即
Java
在
语
法
上
⽀
持
泛
型
,
但
是
在
编
译
阶
段
会
进
⾏
所
谓
的
“
类
型
擦
除
”
(
TypeErasure
),
将
所
有
的
泛
型
表
⽰
(
尖
括
号
中
的
内
容
)
都
替
换
为
具
体
的
类
型
(
其
对
应
的
原
⽣
态
类
型
),
就
像
完
全
没
有
泛
型
⼀
样
。
本
⽂
综
合
多
篇
⽂
章
后
,
总
结
了
Java
泛
型
的
相
关
知
识
,
希
望
可
以
提
升
你
对
Java
中
泛
型
的
认
知
效
率
。
•
Java
基
础
-
泛
型
机
制
详
解
◦
为什么
会
引
⼊
泛
型
◦
泛
型
的
基
本
使
⽤
▪
泛
型
类
▪
泛
型
接
⼝
▪
泛
型
⽅
法
▪
泛
型
的
上下
限
▪
泛
型
数
组
◦
深
⼊
理
解
泛
型
▪
如
何
理
解
Java
中
的
泛
型
是
伪
泛
型
?
泛
型
中
类
型
擦
除
▪
如
何
证
明
类
型
的
擦
除
呢
?
▪
如
何
理
解
类
型
擦
除
后
保
留
的
原
始
类
型
?
▪
如
何
理
解
泛
型
的
编
译
期
检查
?
▪
如
何
理
解
泛
型
的
多
态
?
泛
型
的
桥
接
⽅
法
▪
如
何
理
解
基
本
类
型
不
能
作
为
泛
型
类
型
?
▪
如
何
理
解
泛
型
类
型
不
能
实
例
化
?
▪
泛
型
数
组
:
能
不
能
采
⽤
具
体
的
泛
型
类
型
进
⾏
初
始
化
?
▪
泛
型
数
组
:
如
何
正
确
的
初
始
化
泛
型
数
组
实
例
?
▪
如
何
理
解
泛
型
类
中
的
静
态
⽅
法
和
静
态
变
量
?
▪
如
何
理
解
异
常
中
使
⽤
泛
型
?
▪
如
何
获
取
泛
型
的
参
数
类
型
?
◦
参
考
⽂
章
为什么
会
引
⼊
泛
型
泛
型
的
本
质
是
为了
参
数
化
类
型
(
在
不
创
建
新
的
类
型
的
情
况
下
,
通过
泛
型
指
定
的
不
同
类
型
来
控
制
形
参
具
体
限
制
的
类
型
)
。
也
就
是
说
在
泛
型
使
⽤
过
程
中
,
操
作
的
数
据
类
型
被
指
定
为⼀个
参
数
,
这
种
参
数
类
型
可
以
⽤
在
类
、
接
⼝和
⽅
法
中
,
分别
被
称
为
泛
型
类
、
泛
型
接
⼝
、
泛
型
⽅
法
。
引
⼊
泛
型
的
意
义
在
于
:
•
适
⽤
于
多
种
数
据
类
型
执
⾏
相
同
的
代
码
(
代
码
复
⽤
)
我
们
通过
⼀个
例
⼦
来
阐
述
,
先
看
下下
⾯
的
代
码
:
private static int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a + b;
}
private static float add(float a, float b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a + b;
}
private static double add(double a, double b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a + b;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
如
果
没
有
泛
型
,
要
实
现
不
同
类
型
的
加
法
,
每
种
类
型
都
需
要
重
载
⼀个
add
⽅
法
;
通过
泛
型
,
我
们
可
以
复
⽤
为⼀个
⽅
法
:
private static <T extends Number> double add(T a, T b) {
System.out.println(a + "+" + b + "=" + (a.doubleValue() +
b.doubleValue()));
return a.doubleValue() + b.doubleValue();
}
1
2
3
4
•
泛
型
中
的
类
型在
使
⽤
时
指
定
,
不
需
要
强
制
类
型
转
换
(
类
型
安
全
,
编
译
器
会
检查
类
型
)
看
下
这
个
例
⼦
:
List list = new ArrayList();
1
list.add("xxString");
list.add(100d);
list.add(new Person());
2
3
4
我
们
在
使
⽤
上
述
list
中
,
list
中
的
元
素
都
是
Object
类
型
(
⽆
法
约
束
其
中
的
类
型
),
所
以
在
取
出
集
合
元
素
时
需
要
⼈为
的
强
制
类
型
转
化
到
具
体
的
⽬
标
类
型
,
且
很
容
易
出
现
java.lang.ClassCastException
异
常
。
引
⼊
泛
型
,
它
将
提
供
类
型
的
约
束
,
提
供
编
译
前
的
检查
:
List<String> list = new ArrayList<String>();
// list
中
只
能
放
String,
不
能
放
其
它
类
型
的
1
泛
型
的
基
本
使
⽤
提
⽰
我
们
通过
⼀些
例
⼦
来
学
习
泛
型
的
使
⽤
;
泛
型
有
三
种
使
⽤
⽅
式
,
分别
为
:
泛
型
类
、
泛
型
接
⼝
、
泛
型
⽅
法
。
⼀些
例
⼦
可
以
参
考
《
李
兴
华
-Java
实
战
经
典
》。
@pdai
泛
型
类
•
从⼀个
简
单
的
泛
型
类
看
起
:
class Point<T>{
//
此
处
可
以
随
便
写
标
识
符
号
,
T
是
type
的
简
称
private T var ;
}
public void setVar(T var){
//
设
置
的
类
型
也
由
外
部
决
定
this.var = var ;
}
}
public class GenericsDemo06{
public static void main(String args[]){
Point<String> p = new Point<String>() ;
//
⾥
⾯
的
var
类
型
为
String
类
型
p.setVar("it") ;
//
设
置
字
符
串
System.out.prin
}
1
2
3
4
5
6
7
8
9
10
•
多
元
泛
型
class Notepad<K,V>{
//
此
处
指
定
了两个
泛
型
类
型
private K key ; //
此
变
量
的
return this.key ;
}
public V getValue(){
return this.value ;
1
2
3
4
5
}
public void setKey(K key){
this.key = key ;
}
public void setValue(V value){
this.value = value ;
}
}
public class GenericsDemo09{
public static void main(String args[]){
Notepad<String,Integer> t = null ;
//
定
义两个
泛
型
类
型
的
对
象
t = new Notepad<String,Integer>() ;
//
⾥
⾯
的
key
为
String
,
value
为
Int
t.setKey("
汤
姆
") ;
//
设
置
第
⼀个
内
容
t.setValue(20) ;
//
设
置
第
⼆个
内
容
System.out.print("
姓
名
;
" +
}
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
泛
型
接
⼝
•
简
单
的
泛
型
接
⼝
interface Info<T>{
//
在
接
⼝
上
定
义
泛
型
public T getVar() ; //
定
义
抽
象
⽅
法
,
class InfoImpl<T> implements Info<T>{
//
定
义
泛
型
接
⼝
的
⼦
类
private T var ;
}
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
}
public class GenericsDemo24{
public static void main(String arsg[]){
Info<String> i = null;
//
声
明
接
⼝
对
象
i = new InfoImpl<String>("
汤
姆
") ;
//
通过
⼦
类
实
例
化
对
象
System.out.print
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
泛
型
⽅
法
泛
型
⽅
法
,
是
在
调
⽤
⽅
法
的
时
候
指
明
泛
型
的
具
体
类
型
。
重
点
看
下
泛
型
的
⽅
法
(
图
参
考
⾃
:
https://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html
)
•
定
义
泛
型
⽅
法
语
法
格
式
•
调
⽤
泛
型
⽅
法
语
法
格
式
说
明
⼀下
,
定
义
泛
型
⽅
法
时
,
必
须
在
返
回
值
前
边
加
⼀个
<T>
,
来
声
明
这
是
⼀个
泛
型
⽅
法
,
持
有
⼀个
泛
型
T
,
然
后
才
可
以
⽤
泛
型
T
作
为
⽅
法
的
返
回
值
。
Class<T>
的
作
⽤
就
是
指
明
泛
型
的
具
体
类
型
,
⽽
Class<T>
类
型
的
变
量
c
,
可
以
⽤
来
创
建
泛
型
类
的
对
象
。
为什么
要
⽤
变
量
c
来
创
建
对
象
呢
?
既
然
是
泛
型
⽅
法
,
就
代
表
着
我
们
不
知
道
具
体
的
类
型
是
什么
,
也不
知
道
构
造
⽅
法
如
何
,
因
此
没
有
办
法
去
new
⼀个
对
象
,
但
可
以
利
⽤
变
量
c
的
newInstance
⽅
法
去
创
建
对
象
,
也
就
是
利
⽤
反
射
创
建
对
象
。
泛
型
⽅
法
要
求
的
参
数
是
Class<T>
类
型
,
⽽
Class.forName()
⽅
法
的
返
回
值
也
是
Class<T>
,
因
此
可
以
⽤
Class.forName()
作
为
参
数
。
其
中
,
forName()
⽅
法
中
的
参
数
是
何
种
类
型
,
返
回
的
Class<T>
就
是
何
种
类
型
。
在
本
例
中
,
forName()
⽅
法
中
传
⼊
的
是
User
类
的
完
整
路
径
,
因
此
返
回
的
是
Class<User>
类
型
的
对
象
,
因
此
调
⽤
泛
型
⽅
法
时
,
变
量
c
的
类
型
就
是
Class<User>
,
因
此
泛
型
⽅
法
中
的
泛
型
T
就
被
指
明
为
User
,
因
此
变
量
obj
的
类
型
为
User
。
当
然
,
泛
型
⽅
法
不
是
仅仅
可
以
有
⼀个
参
数
Class<T>
,
可
以
根
据
需
要
添
加
其
他
参
数
。
为什么
要
使
⽤
泛
型
⽅
法
呢
?
因
为
泛
型
类
要
在
实
例
化
的
时
候
就
指
明
类
型
,
如
果
想
换
⼀
种
类
型
,
不
得
不
重
新
new
⼀
次
,
可
能
不
够
灵
活
;
⽽
泛
型
⽅
法
可
以
在
调
⽤
的
时
候
指
明
类
型
,
更
加
灵
活
。
泛
型
的
上下
限
•
先
看
下
如
下
的
代
码
,
很
明显是
会
报
错
的
(
具
体
错
误
原
因
请
参
考
后
⽂
)
。
剩余26页未读,继续阅读
资源评论
weishaoonly
- 粉丝: 132
- 资源: 1383
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- #P0015. 全排列 超级简单
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功