博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础之泛型
阅读量:7114 次
发布时间:2019-06-28

本文共 1273 字,大约阅读时间需要 4 分钟。

hot3.png

泛型,宽泛的数据类型”

可以接受任意类型(类)的数据。

■泛型定义(类和接口)

类型参数必须是一个合法的标识符,习惯上使用单个大写字母,通常情况下,

K 表示键,

V 表示值,

E 表示元素,

N表示数字,

T 表示一般意义上的数据类型。

例:class Point<TX, TY>

■泛型变量

泛型类在实例化时必须指出具体的类型,也就是向类型参数。

例:

TX x;

TX y;

■泛型实例化

Point<Integer, Integer> p = new Point<Integer, Integer>();

类型擦除

Point p = new Point();

■泛型方法

class UTest {

    public <TX, TY> TX print(TX x, TY y)

public class Point<TX, TY> {

    public TX print(TX x, TY y) {

■泛型界限(上界)

public <TSB extends T1> T getMax(T array[]){

此处的”extends“表示的子类型,不等同于继承。

多重限制范围格式

<T extends A & B & C>

使用“&”分隔。且限制范围中之多有一个类。如果用一个类作为限定,它必须是限定列表中的第一个。

■泛型界限(下界)

<T super A>

注意:不能同时声明上界和下界。

■泛型通配符(?)

使用通配符(?)来代表“任意”未知类型,主要用于与泛型类型无关的定义:

public void print(Point<?, ?> p) {

最常用的就是Class<?>,因为Class<T>并没有依赖于T。

单独一个“?”的也叫无界通配符。

通配符的上界

? extends T 表示泛型的类型参数只能是 T 及其子类。

对于通配符的上界,有以下几点:

(假设给定的泛型类型为G,

(如List<E>中的List),两个具体的泛型参数X、Y,当中Y是X的子类)

G<? extends Y> 是 G<? extends X>的子类型

G<X> 是 G<? extends X>的子类型

G<?> 与 G<? extends Object>等同,如List<?> 与List<? extends Objext>等同。

传入的参数是未知的,所以java为了保护其类型一致,禁止向List<? extends X>添加任意对象,不过却可以添加 null,即list.add(null)是可行的。

通配符的下界

使用通配符(?)不但可以限制类型的上限,还可以限制下限。限制下限使用 super 关键字,例如 <? super TSB> 表示只能接受 TSB 及其父类。

List<Object>与List<?>并不等同,List<Object>是List<?>的子类。还有不能往List<?> list里添加任意对象,除了null。

转载于:https://my.oschina.net/dubenju/blog/424567

你可能感兴趣的文章
人是怎么废掉的?
查看>>
vim编辑器使用
查看>>
高精度算法集合
查看>>
MyEclipse中消除frame引起的“the file XXX can not be found.Please check the location and try again.”的错误...
查看>>
Mysql InnoDB三大特性-- change buffer
查看>>
TCP、UDP、RTP(RTCP)异同与区别
查看>>
Linux的文件最大连接数
查看>>
文章标题
查看>>
JAVA线程
查看>>
用for和while循环求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]
查看>>
压缩跟踪(CT)代码具体学习_模块1(样本的採集和扩充)
查看>>
硬盘写入 iso
查看>>
Linux学习日记——字符处理
查看>>
shell问题-报错即退出
查看>>
html常用标签
查看>>
java代理模式实例讲解
查看>>
maven+springmvc+hibernate搭建web项目
查看>>
Bug解决过程复盘
查看>>
nginx 重写 rewrite 基础及实例(转)
查看>>
MySql语句大全:创建、授权、查询、修改等(转)
查看>>