Java中泛型 问号的作用
这是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> 是不一样的。
Java中泛型 问号的作用的更多相关文章
- Java中泛型使用
Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList ...
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
- 自己(转)JAVA中toString方法的作用
JAVA中toString方法的作用 因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.print ...
- 【Java_基础】Java中Native关键字的作用
本篇博文转载与:Java中Native关键字的作用
- Java中泛型Class<T>、T与Class<?>、 Object类和Class类、 object.getClass()和Object.class
一.区别 单独的T 代表一个类型(表现形式是一个类名而已) ,而 Class<T>代表这个类型所对应的类(又可以称做类实例.类类型.字节码文件), Class<?>表示类型不确 ...
- Java 中泛型的实现原理
泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码.本文总结了 Java 泛型的三种形式以及泛型实现原理. 泛型 泛型的本质是对类型进行参数化,在代码逻 ...
- Java中泛型的详细解析,深入分析泛型的使用方式
泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...
- java中关键字volatile的作用
用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...
- Java中Native关键字的作用
初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个native呢?这是我所要学 ...
随机推荐
- 2016030201 - github上创建项目
具体步骤如下: 前提是你已经由github账户,登陆你的账户后 步骤1:点击右下角+new repository 2.添加代码库描述内容,比如reposltory name 例如我创建的内容 3.点击 ...
- Gogs:可能是比Gitlab更好的选择
Gitlab是一个很棒的Git托管服务,几乎像GitHub一样强大. 但是,有没有能和Gitlab/Github媲美但操作更简单的项目呢?我认为 Gogs 是很好的选择. 简介 现在,GitHub已经 ...
- h.264 去块滤波
块效应及其产生原因 我们在观看视频的时候,在运动剧烈的场景常能观察到图像出现小方块,小方块在边界处呈现不连续的效果(如下图),这种现象被称为块效应(blocking artifact). 首先我们需要 ...
- ThreadPoolExecutor介绍
ThreadPoolExecutor的说明 ThreadPoolExecutor常见的操作主要有以下几个方法: getPoolSize():返回线程池实际的线程数. getActiveCount(): ...
- 深入Spring之web.xml
针对web.xml我打算从以下几点进行解析: 1.ContextLoaderListener: 启动Web容器时,自动装配ApplicationContext的配置信息. 2.RequestConte ...
- 使用 ext3grep 恢复数据试验成功 笔记
使用 ext3grep 恢复数据试验成功 笔记 来源: Linux论坛 日期: 2009.07.07 10:03 (共有条评论) 我要评论 [Copy to clipboard] [ - ...
- 【转】压缩Virtualbox的vdi文件
原文网址:http://i.rexdf.org/blog/2014/10/06/ya-suo-virtualboxde-vdiwen-jian/ 问题实际上比较简单,我在Arch Linux杂记中给出 ...
- duang体加班版
领导第一次让我加班的时候,其实我是拒绝的,因为我觉着加班这个事,不能你让我加我就加,晚了就没有地铁了..领导跟我说可以打车报销.加了一个月之后,我的钱包duang~,后来我知道报销其实是假的,我每天打 ...
- poj 1704 Georgia and Bob(阶梯博弈)
Georgia and Bob Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8656 Accepted: 2751 D ...
- 在MacOSX下使用Github管理Xcode代码
版本控制应该算是每个程序员所必备的技能,这个重要性,我就不多说了哈.现在版本控制基本上就是两种途径:SVN和Git.对于SVN我并不是非常了解,只知道在Windows下非常实用,但是在MacOSX下, ...