泛型

泛型

为什么要使用泛型程序设计?

泛型程序设计意味着编写的代码可以对多种不同类型的对象重用。在泛型类之前,有一个ArrayList类就已经可以收集任意类型的对象。在增加泛型类之前,泛型程序设计使用继承来实现。ArrayList只维护一个Object引用的数组。

类型参数的好处?

var files = new ArrayList<String>();

ArrayList<String> files = new ArrayList<>();

等价。注意这样书写,只用在前面指明参数类型即可。

  • 在这里通过菱形语法,指明了ArrayList中存放的是String类型的参数。编译器可以充分利用这个信息,在调用get()方法时,不用进行类型转换。

  • 在编写代码时,编译器还可以进行检查,防止插入错误类型的对象。例如:调用add()方法时。书写了错误的类型对象是无法通过编译的。

泛型类

有一个或多个类型变量的类。

public class Pair<T,U> {...}

Java库使用变量E来表示集合的元素类型,K,V分别表示表的键和值的类型,T(必要时也可使用相邻的字母U,S)表示“任意类型”

可以使用具体的类型替换类型变量来实例化泛型实例。

pair<String>

泛型类相当于普通类的工厂

泛型方法

类型变量放在修饰符的后面,并在返回类型的前面。

public static <T> T getMiddle(T...a)
{
    return a[a.length/2];
}

泛型方法可以在泛型类中定义,也可以在普通方法中定义

在调用泛型方法时可以把具体类型包围在尖括号中,放到方法名前。

String middle = ArrayAlg.<String>getMiddle("Jon","Q","Public");

通常类型参数可以省略,编译器可以推断出来。

类型变量的限定

public static <T extends Comparable> T min(T[] a)...

这里,限制了T只能是实现了Comparable接口的类。

这里因为Comparable是一个接口,所以使用extends关键字。

可以使用“&”来实现多个限定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值