欢迎光临
我们一直在努力

什么是泛型泛型的作用是什么,泛型问号

这是jdk1.5泛型的典型应用:
第一种写法,叫做使用泛型方法:

?? public <T extends Object> void thisIsT(List <T> list){

??????? //…

?? }

当然还可以这样写:

??? public <T> void thisIsT(List <T> list){

??????? //…

??? }

这两种写法效果是一样的.
第二种写法,叫做有限制的通配符:

??? public void thisIsP(List <? extends Object> list){

??????? //…

??? }

其实还有这种写法就是把这两种方法结合起来:
看下面的这个示例:(Collections.copy())

?? class Collections {

?????? public static <T>? void copy(List<T> dest, List<? extends T> src){…}

?? }

仔细观察上面的这个方法,既使用了有限制的通配符(?),
又使用了泛型方法.
这两种泛型使用方法的主要区别就是:
泛型函数(这里指copy()这个方法)允许类型参数(Type Parameters)被用来表示方法的一个或多个参数之间的关系,或者
参数与其返回值之间的关系.如果没有这样的依赖关系,不应该使用泛型方法.

在这里和大家共同学习了,更多请参考:

说白了就是写成T就是将类型固定,而?则不固定,比如下面这个例子
public class CollectionGenFoo<T extends Collection> {

}
这么写就会报错
CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
如果把 CollectionGenFoo<T extends Collection> 改成 CollectionGenFoo<? extends Collection>的话
CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
则不会报错。

T 是一种类型。
?是泛指(就是通配符)
List<?>? 和List<Object> 是不一样的。

转载于:https://www.cnblogs.com/cRaZy-TyKeIo/p/3447614.html

33517489

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。