课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java 中泛型的全面解析——类型系统
  • Java 中泛型的全面解析——类型系统

    发布:昆明Java培训      来源:达内新闻      时间:2016-07-22

  • 昆明达内java培训班的老师在java的教学过程中知道,学员们在Java课程中比较熟悉的是通过继承机制而产生的类型体系结构。

    比如String继承自Object。根据Liskov替换原则,子类是可以替换父类的。当需要Object类的引用的时候,如果传入一个String对象是没有任何问题的。但是反过来的话,即用父类的引用替换子类引用的时候,就需要进行强制类型转换。 译器并不能保证运行时刻这种转换一定是合法的。这种自动的子类替换父类的类型转换机制,对于数组也是适用的。String[]可以替换Object[]。但是泛型的引入,对于这个类型系统产生了一定的影响。正如前面提到的List是不能替换 掉List<Object>的。

    引入泛型之后的类型系统增加了两个维度:一个是类型参数自身的继承体系结构,另外一个是泛型类或接口自身的继承体系结构。第一个指的是对于List<String>和List<Object>这样的情况,类型参数String是继承自Object的。而 二种指的是List接口继承自Collection接口。对于这个类型系统,有如下的一些规则:

    相同类型参数的泛型类的关系取决于泛型类自身的继承体系结构。即List<String>是Collection<String>的子类型,List<String>可以替换Collection<String>。这种情况也适用于带有上下界的类型声明。当泛型类的类型声明中使 了通配符的时候,其子类型可以在两个维度上分别展开。如对Collection<? extends Number>来说,其子类型可以在Collection这个维度上展开,即List<? extends Number>和Set<? extends Number>等;也可以在Number这个层次上展开,即Collection<Double>和Collection<Integer>等。如此循环下去,ArrayList<Long>和HashSet<Double>等也都算是Collection<? extends Number>的子类型。如果泛型 中包含多个类型参数,则对于每个类型参数分别应用上面的规则。

    达内java培训班老师讲完后大家是不是理解了上面的规则之后,就可以很容易的修正实例分析中给出的代码了。只需要把List<Object>改成List<?>即可。List<String>是List<?>的子类型,因此传递参数时不会发生错误。

    看完了这一期达内java培训课程,记得还有下一期昆明达内java培训的老师给大家讲开发自己的泛型类,不要错过哟!

    推荐文章

上一篇:Java中泛型的全面解析——通配符与上下界

下一篇:Java 中泛型的全面解析——开发自己的泛型类

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56