?:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义。

(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的泛型的更多相关文章

  1. javac之BridgeMethod及泛型擦除重写

    When compiling a class or interface that extends a parameterized class or implements a parameterized ...

  2. 二十四、JDK1.5新特性---泛型

    由于本人认知有限,泛型在使用上没有太大压力,但是尚未具备详细介绍泛型的能力,因此本文只是粗略的描述泛型的相关知识,在以后的学习过程中会对这篇文章进行修改,希望这篇文章不会给读者带来迷惑,特此声明 什么 ...

  3. Java泛型详解 转载

    转载地址:http://blog.csdn.net/jinuxwu/article/details/6771121 比较好的讲解: http://blog.csdn.net/lonelyroamer/ ...

  4. Java重载遇到泛型

    今天被问到一个有意思的问题,大家都知道重载的概念吧:一个类中定义同名的方法,参数表不同(参数类型,或者参数个数不通): 但是,如果是下面这个两个方法呢 public static int fn(Lis ...

  5. java高新技术-泛型

    1.体验泛型 泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时去除掉"类型"信息,使程序运行小效率不受影响 ...

  6. 黑马程序员:Java编程_泛型

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中.使用 ...

  7. Javac早期(编译期)

    从Sun Javac的代码来看,编译过程大致可以分为3个过程: 解析与填充符号表过程. 插入式注解处理器的注解处理过程. 分析与字节码生成过程. Javac编译动作的入口是com.sun.tools. ...

  8. Java泛型总结

    1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...

  9. 学习记录 java泛型资料

    java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...

随机推荐

  1. scanf和fscanf读取文件

    这篇是针对推箱子游戏而写的,某个时候在学C语言,最近转到windows设计,不知道是否有同样的感受,后面的东西学了,前面的就有点生疏了.其实,我的理解是,注意力转移了,当集中于当前问题的时候就会忽略以 ...

  2. (最长回文串 模板) 最长回文 -- hdu -- 3068

    http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  3. [label][翻译][JavaScript Regular Expression]JavaScript Regular Expressions

    原文:http://www.javascriptkit.com/javatutors/re.shtml 校验用户的输入是每一个软件开发者的必须要做的事情. 正则表达式与模式 如何在JavaScript ...

  4. 发展科技到底有什么用,转NASA专家给一位修女的一封信

    问题补充:我们难道不应该把这些资金用于更深入的医疗保障和减少贫穷吗? 我们为何要仰望星空,花大量的金钱和精力探索那不可预知的宇宙呢?NASA科学家写给非洲修女的一封信回答得特别好,也特别震撼人心.—— ...

  5. [leetcode] 17. Merge Two Sorted Lists

    这个非常简单的题目,题目如下: Merge two sorted linked lists and return it as a new list. The new list should be ma ...

  6. Tmux入门教程

      对于程序员来说效率绝对是最重要的,那我们今天就来介绍下一个能极大提高工作效率的软件Tmux.   Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话.不仅如此,你还可以通过 Tmux 使终 ...

  7. KMeans|| in Spark MLLib

    算法跟传统的kmeans的区别主要在于:kmeans||的k个中心的不是随机初始化的.而是选择了k个彼此"足够"分离的中心. org.apache.spark.mllib.clus ...

  8. 设计模式之代理模式(Proxy Pattern)_补充篇

    写在前面: 代理模式的内部原理,作用及远程代理的实现在上一篇博文中都做了详细解释,本文只是对其内容的补充,介绍其它代理 一.虚拟代理 首先,明确虚拟代理的作用:在巨大对象被真正创建出来之前,用虚拟代理 ...

  9. c# readkey readline read 区别

    Console.read().Console.readline().Console.readkey()和Console.Write.Console.Writeline()的区别 Console.rea ...

  10. 【cocos2d-x 手游研发----研发思路及感想】

          我半年前进入了目前的这家做教育行业的公司(在此之前一直从事原生态开发手游的迷茫之路),学习是一件很快乐的事情,来到这家公司我有了很多时间去学习,不管是公司业务,还是其他技术相关的.于是开始 ...