Java核心技术对泛型设计的总结(1) 通配符

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<?> 都要比不带泛型的对象要更好,同时在一些简单的情况下使用这样的语法可以实现一些比使用普通语法更简便和可读性更强的版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值