java 泛型中 T 和 问号(通配符)的区别
类型本来有:简单类型和复杂类型,引入泛型后把复杂类型分的更细了;
现在List<Object>, List<String>是
两种不同的类型
;且无继承
关系;泛型的好处如:
开始版本
public void write(Integer i, Integer[] ia);
public void write(Double d, Double[] da);
泛型版本
public <T> void write(T t, T[] ta);
简便了代码
定义泛型
1.定义在类后面
紧跟
类名
后面public class TestClassDefine<T, S extends T>{}
定义泛型 T, S, 且S 继承 T
2.定义在方法
装饰符
后面紧跟
修饰符
后面(public)public <T, S extends T> T testGenericMethodDefine(T t, S s){}
定义泛型 T, S, 且S 继承 T
实例化泛型
- 1.实例化
定义在类
上的泛型
第一声明类变量
或者实例化时
。例如
List<String> list;
list = new ArrayList<String>;
第二继承类
或者实现接口
时。例如
public class MyList<E> extends ArrayList<E> implements List<E> {...}
- 2.实例化
定义方法
上的泛型<br/>
当调用范型方法时,编译器自动对类型参数(泛型)
进行赋值,当不能成功赋值时报编译错误
通配符(?)
上面有泛型的定义
和赋值
;当在赋值
的时候,上面一节说赋值的都是为具体类型
,当赋值的类型不确定
的时候,我们用通配符(?)
代替了:
如
List<?> unknownList;
List<? extends Number> unknownNumberList;
List<? super Integer> unknownBaseLineIntgerList;
在Java集合框架中,对于参数值是
未知类型
的容器类,只能
读取其中元素,不能
向其中添加元素, 因为,其类型是未知,所以编译器无法识别添加元素的类型和容器的类型是否兼容,唯一的例外是NULL
源自:http://blog.csdn.net/jinuxwu/article/details/6771121
java 泛型中 T 和 问号(通配符)的区别的更多相关文章
- Java泛型中的类型参数和通配符类型
类型参数 泛型有三种实现方式,分别是泛型接口.泛型类.泛型方法,下面通过泛型方法来介绍什么是类型参数. 泛型方法声明方式:访问修饰符 <T,K,S...> 返回类型 方法名(方法参数){方 ...
- 【转】聊一聊-JAVA 泛型中的通配符 T,E,K,V,?
原文:https://juejin.im/post/5d5789d26fb9a06ad0056bd9 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型 ...
- Java泛型中的通配符T,E,K,V
Java泛型中的通配符T,E,K,V 1.泛型的好处 2.泛型中的通配符 2.1 T,E,K,V,? 2.2 ?无界通配符 2.3 上界通配符 < ? extends E> 2.4 下界通 ...
- Java泛型中的通配符
Java泛型中的通配符可以直接定义泛型类型的参数.而不用把该函数定义成泛型函数. public class GenericsTest { public static void main(String[ ...
- Java 泛型中的通配符
本文内容如下: 1. 什么是类型擦除 2.常用的 ?, T, E, K, V, N的含义 3.上界通配符 < ?extends E> 4.下界通配符 < ?super E> 5 ...
- Java泛型中<?> 和 <? extends Object>的异同分析
相信很多人和我一样,接触Java多年,却仍旧搞不清楚 Java 泛型中 <?>和 <? extends Object>的相似和不同.但是,这应该是一个比较高端大气上档次的Que ...
- Java泛型中extends和super的理解(转)
E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...
- Java泛型中的协变和逆变
Java泛型中的协变和逆变 一般我们看Java泛型好像是不支持协变或逆变的,比如前面提到的List<Object>和List<String>之间是不可变的.但当我们在Java泛 ...
- Java泛型中extends和super的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
随机推荐
- 关于hot miami的沙盒生存俯视角射击游戏
一些关卡设计元素 撞门杀 扇形视角
- easyui 定义的右键菜单 在 浏览器中 失效.
使用 火狐 打开 easy ui 开发的网页, 鼠标右键 没有出现 自定义的 easyUI右键菜单, 出现的是鼠标本身的右键菜单. 如果使用ie 则正常. 原因在于我 的火狐使用了解除右键限制 这个脚 ...
- Android Mms之:深入MMS支持
Composing and editing MMS在Android Mms应用里面的具体实现形式,或数据结构是SlideshowModel,它是一个每个节点为SlideModel的ArrayList, ...
- Adaboost公式推导
- Linux下mysql操作
1.linux下MYSQL的启动与访问 http://www.cnblogs.com/hunter007/articles/2251795.html 2.linux下mysql基本的操作 http:/ ...
- OK335xS U-boot 编译问题&无Linux shell 问题
/************************************************************************** * OK335xS U-boot 编译问题&am ...
- [LeetCode&Python] Problem 821. Shortest Distance to a Character
Given a string S and a character C, return an array of integers representing the shortest distance f ...
- Unity插件-NGUI使用教程
Unity插件-NGUI使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大的次 ...
- .NET 中什么样的类是可使用 await 异步等待的?
我们已经知道 Task 是可等待的,但是去看看 Task 类的实现,几乎找不到哪个基类.接口或者方法属性能够告诉我们与 await 相关. 而本文将探索什么样的类是可使用 await 异步等待的? D ...
- Windows系统清除远程连接记录的方法
=============================== 1.点击“开始->运行”,在输入框中键入regedit并回车. 在打开的注册表编辑器中, 找到“HKEY_CURRENT_USER ...