昆明java培训
达内昆明广州春城路

18487146383

热门课程

Java 中泛型的全面解析——类型系统

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

昆明达内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 中泛型的全面解析——开发自己的泛型类

ThreadLocal的内存泄漏问题

Java之this关键字的用法

昆明达内老师讲解的多线程入门知识

什么是AOP?

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货