javac的泛型
?:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义。
(1)?表示通配符,通配符 与 T 的区别
T:作用于模板上,用于将数据类型进行参数化,不能用于实例化对象。
public <T extends Number> void test(T t){
t.byteValue();
}
再如将key,value的数据类型进行< K, V >参数化,而不可以使用通配符
public class Container<K extends Number, V> { // 不能使用<K super Number>这样进行类型参数化
private K key;
private V value;
public Container(K k, V v) {
key = k;
value = v;
}
}
(2)<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”,只取不放,因为如果有以下代码,我们并不知道这个水果盘子的具体盘子类型(new Plate<Apple>())。
Plate<? extends Fruit> p=new Plate<Apple>();
注意与class Plate<T extends Fruit>的区别。

(3)<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”,可以放,因为水果盘子肯定可以放入苹果,但是取时只能以Object接收。

注意:
(1)一定要区别出?与T的区别,如class ClassName<T extends Number>{}与ClassName<? extends Number>的区别。
(2)对于类型参数化时只能使用extends关键字,而不能使用super
(3)只有类型参数化时才能有如<T extends C1&I1&I2>的形式,而通配符类型不允许有这样的写法。
(4)泛型擦除只针对类型参数化,与通配符没有任何关系
使用通配符后的类型有contravariant性质,contravariant参考:http://www.cnblogs.com/extjs4/p/6305654.html

对于通配符和泛型之间有Capture Conversion,具体可以参考:http://www.cnblogs.com/extjs4/p/6284620.html
另外对于泛型还有类型推断、对于通配符还有类型捕获
参考文章:
(1)https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
(2)http://bayou.io/draft/Capturing_Wildcards.html
(3)http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html 非常重要的文档
javac的泛型的更多相关文章
- javac之BridgeMethod及泛型擦除重写
When compiling a class or interface that extends a parameterized class or implements a parameterized ...
- 二十四、JDK1.5新特性---泛型
由于本人认知有限,泛型在使用上没有太大压力,但是尚未具备详细介绍泛型的能力,因此本文只是粗略的描述泛型的相关知识,在以后的学习过程中会对这篇文章进行修改,希望这篇文章不会给读者带来迷惑,特此声明 什么 ...
- Java泛型详解 转载
转载地址:http://blog.csdn.net/jinuxwu/article/details/6771121 比较好的讲解: http://blog.csdn.net/lonelyroamer/ ...
- Java重载遇到泛型
今天被问到一个有意思的问题,大家都知道重载的概念吧:一个类中定义同名的方法,参数表不同(参数类型,或者参数个数不通): 但是,如果是下面这个两个方法呢 public static int fn(Lis ...
- java高新技术-泛型
1.体验泛型 泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时去除掉"类型"信息,使程序运行小效率不受影响 ...
- 黑马程序员:Java编程_泛型
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中.使用 ...
- Javac早期(编译期)
从Sun Javac的代码来看,编译过程大致可以分为3个过程: 解析与填充符号表过程. 插入式注解处理器的注解处理过程. 分析与字节码生成过程. Javac编译动作的入口是com.sun.tools. ...
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
- 学习记录 java泛型资料
java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...
随机推荐
- Linux C 创建目录函数mkdir相关【转】
转自:http://blog.csdn.net/fallenink/article/details/8480483 原文地址:http://sharp2wing.iteye.com/blog/1280 ...
- Spring 配置 事务的几种方式
Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块! 首先我创建了两个类 ...
- A River Runs Through It
Our birth is but a sleep and a forgetting: The Soul that rises with us, our life's Star, ...
- eclipse快捷键(增加一些4连组合快捷键)
http://www.blogjava.net/i369/articles/83309.html ECLISPE的快捷键大全 Eclipse 常用快捷键收集2006年09月29日 星期五 12:0 ...
- Windows Phone 8.1 生命周期调试
之前重装了机子,今天调试时突然找不到调试生命周期的菜单栏了.最后找了5分钟,终于找回来了,特此记录以免以后重装后再出现这种状况. 项目启动调试后: 这样是没有显示调试生命周期的,接下来在工具栏右键: ...
- ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。
首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...
- XML字符串反序列化为实体
JSON反序列化实体 paydata = StringHelper.Base64ToString(paydata); resInfo = JsonConvert.DeserializeObject&l ...
- wpf使用DynamicDataDisplay插件,修改x轴的样式,改成透明的。
时光偷走的,永远都是我们眼皮底下看不见的珍贵. 问题:X轴会显示灰色拖动条. 解决:将X轴颜色改为透明. DDD插件是开源的,但是网上的参考资料却很少,所以,很多问题在网上搜索不到,因为没有找到该插件 ...
- max渲染通道元素的范例
renderElementManager = MaxOps.GetCurRenderElementMgr() renderElementManager.Removeallrenderelements( ...
- 2019年新出现的ocp 062考试原题-2
2.Which three statements are true about pfiles, spfiles or both? A) All spfile parameters can be mod ...