添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

JDK1.5后的三大主要特性:泛型、枚举、Annotation。

1、泛型的产生背景

假如,现在定义一个表示坐标的类,Point,属性坐标x,y,但是此类设计特殊,现在由于设计特殊,现在实际使用中有可能出现以下三种结构的数据:

  • 整数:x=10、y=10;
  • 小数:x=10.1、y=10.1;
  • 字符串:x=东经10度、y=北纬20度。
  • 可以发现,Point中可以保存三种数据类型,而Point类中只存在xy两个属性。现在唯一可以想到的数据类型就是Object类型,因为满足以下转换:

    保存int:int-》自动装箱为Integer-》向上转型为Object;

    保存double:double-》自动装箱为Double-》向上转型为Object;

    保存字符串:String-》向上转型为Object。

    【第一步】:定义Point类

    以上代码编译OK,但是项目运行时会发生错误:

    以上分析可知,向下转型这种操作本身存在安全隐患问题,且不能通过编译检查出来,用Object类进行这类处理就说有这种问题。 那么该问题如何解决呢?唯一的解决方案就是不进行对象的向下转型。 这样的背景下,就产生了泛型的技术。

    泛型的本质:类中的属性或方法的参数,不设置具体的类型,只使用一个标记表示,而在类使用的时候才对其动态的绑定一种数据类型。

    【举例】:使用泛型

    泛型类型可以改变,将以上使用的泛型类型由String 变为Integer,此时fun方法不能正常使用,且由于重载是受到参数类型而不是泛型类型的限制,那么无法通过重载来解决此问题。那么该如何解决,需要一种标记满足以下要求:

  • 可以用于泛型上,这样可以避免安全警告;
  • 标记使用后,允许接收任何内容,但是不能修改里面的数据;
  • 为此,泛型中提供了一个重要的通配符“?”

    【举例】:使用通配符描述

    但是,此通配符基础上又扩展处理两个子通配符组合:

  • ?extends 类:设置泛型的上限,可以设置在类或方法参数中;
    ?extends Number:表示可以使用的泛型只能是Number或者Number的子类;
  • ?super 类:设置泛型的下限,可以设置在方法参数中:
    ?super String:表示只能够设置String或者其父类。
  • 【举例】:设置泛型的上限(只能设置数字)

    ———————————————————————————————————

    本文为博主原创文章,转载请注明出处!

    若本文对您有帮助,轻抬您发财的小手, 关注/评论/点赞/收藏 ,就是对我最大的支持!

    祝君升职加薪,鹏程万里!

    文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。

    原文链接:winter.blog.csdn.net/article/details/106061267