Java通配符主要用来解决泛型设计中类型约束中继承概念所导致的限制,原因则是Java泛型中,可以为各种容器和集合来添加类型约束用来获取类型检查功能避免导致错误的类型再程序运行时才会被发现出来。但是却有产生了一些另人烦恼的限制,比如为了保证类型的安全一个Pair<Employee>对象是一个Pair<Manager>将不会有任何关联,也就是说不能将Pair<Employee>和Pair<Manager>指向同一个引用,(当然如果说声明了Pair<Employee>对象需要把1个Manager对象存储到其中这样子是可以允许的不会出现错误,因为毕竟1个Manager也是1个Employee)。所以在这种情况下就需要使用通配符来放宽这样的限制
通配符可以用来实现以下2个语法 <? Super Manager>和<? Extends Employee> 前者的含义为保存在容器中的对象可以为Manager的任何父类,或者是任何Manager实现的接口。
而后者则相反为必须继承了Employee的子类或者是实现了Employee的子类型。而这2个语法各支持1种操作,<? Super Manager>支持对数据域的修改,而<? Extends Employee> 则支持对数据域的访问,上面这2个功能个人感觉可以用面向对象程序设计中的继承和多态来解释和理解。个人理解的含义就是如果使用<? Super Manager>父类中的数据域同时也会在子类中拥有,所执行提供参数的功能时不会出现任何问题,也就是说不会出现访问一个在父类中不存在的数据域的情况,而如果使用<? Extends Employee>子类中包含了父类的所有数据域所有可以实现访问的功能。
总之对这2个语法的理解可以为,父类限定通配符可以向泛型对象进行写入,而子类限定通配符则可以向泛型对象读取。
最后通配符的一个应用的语法可以为Employee<?>,该语法虽然形式上可能和不带泛型的对象相同,但是任何时Employee<?>都要比不带泛型的对象要更好,同时在一些简单的情况下使用这样的语法可以实现一些比使用普通语法更简便和可读性更强的版本