转行小白成长路-java篇

第15章:泛型(中上)

  这次看到比较干货,进度也慢了些。后面的内容都是硬骨头了,不仅仅是一些基础意义的,更多的是底层思想反倒上层设计上。这次讲泛型的实现原理。以及几种应用场境下的原理。

  必须说一下昨天提到的,普通类不能用泛型修饰,这话是错误的。因为这几章虽然有普通类用泛型修饰,但是他们并没有什么大的实际作用,除非是把T这类直接作为方法返回参数,或者作为属性类型。他确实能够起到一些作用。拓宽了应用范围。 我是挺不能理解这种做法的。逻辑上是有些矛盾的,毕竟是人发明的,很多都是人为设定的。也没有办法说理。我认为普通类不应该使用泛型。

  泛型的实现原理就是擦除。不指明类型,也就是说T根据依附的场景进行裁定为那种更宽泛的类型,一般会被定义成object,这还是有道理的,当时既要容纳以前的代码,又要和现有的代码配合,诸多逻辑的限制,确实挺难实现的。

  擦除有好处,也有坏处。再说好坏之前我们需要提及昨天说到的泛型主要是将检查错误提到编译阶段,用检查的方式防止错误的发生。好处就很明显了,明显拓宽了限制的范围,用书中的话来讲就是边界有了变动的手段。坏处就是擦除类型信息,在运行时就无法知道相关信息。这是最大的结症,但是这里必须提及一下。结合我们之前看的,上一章类型信息中说,类型的加载顺序与RTTI和反射有脱离不了的关系,但是这章又说泛型运行时无法加载信息。,在结合我们之前容器所看的容器内的对象显示上转型成object然后下转型成具体对象的引用,本章后记节也有提到。我大致可以推断出来泛型在擦除的时候必然会留下记录,以便返回来时可以擦找到相应的类型。

  边界就是擦看字节码,泛型发生的动作基本就是边界,它本身就是一个比较虚无的概念的东西。具体有什么作用,希望明天能找到答案。

原文地址:https://www.cnblogs.com/aiwin/p/12459218.html