带着问题阅读?
P1.继承,接口本身具有泛化的意义,那么Java泛型的提出比起继承和接口解决的额外的问题是什么?
P2.Java泛型有哪些不足?
P1:
1.当我们思考Java的世界,除了数据,就是方法了。而对于方法主要由三个部分组成,输入,处理,输出。
2.当我们希望我们的程序具有通用性时,我们也必须确保输入的数据遵循一定的格式,不然肯定会报错,输入格式可以由开发者自行约定(这就是C++中的泛型了吧,开发者保证输入,处理调用和输出的正确性),也可以把这部分工作交给编译器(但是编译器并不智能,为了保证输入格式的百分百正确,有时还会增加开发者的负担)。
3.当我们不调用输入对象的方法时:
a.此时,我们面临的就是输入出的通用性问题,这时候典型的场景就是容器。对于容器, 在没有泛型的时候,我们可以将输入以Object的方式存放,然后开发者以强转的方式取数据(开发者此时不仅要保证输入和输出的正确性,还要进行数据转换,重点就是开发者已经保证了正确性还要转换,这不是多此一举嘛)
b.此时,Java泛型出现了。Java泛型的思想就是通过声明统一输入和输出,以T等字母为占位符,编译器保证类中同一字母代表的类必须一致,这样虽然需要声明一次,但是不必强制转换,还是方便了不少。
4.当我们需要调用输入对象的方法时:
由于Java泛型是由编译器保证的,这样确实能够避免开发者因粗心带来的错误,但是也带来很多不方便的地方。例如,我们明知道我们传入的类有这个方法,编译器却提示错误,这就是java中泛型的不足,它主要体现在泛型参与处理时。java中泛型默认是Object类型,虽然开发者可以通过 extends 和super 让编译器了解更多关于对象的信息,从而为开发者带来比使用接口和继承机制更好的体验,但这终究不是泛型的思想,只能算是java的语法糖。泛型的实质是将算法尽可能地抽象化,不依赖具体的类型(引用他人一句话),而在java中我们并不能不受限的让算法用在可用的数据上(P2泛型的不足)
5.泛型类和泛型方法:泛型类主要是声明了类中具有一致性的数据,泛型方法可以通过将泛型参数置于返回值前来声明方法中具有一致性的数据,这样我们就可以利用java提供的语法糖来提升开发的效率。
额外学到的语法糖:
Java 迭代器:计算机高级编程,本质上是面向编译器编程,只要你编写的程序编译器能懂就行,从高级语言到字节码,编译器会帮你完成。通过提升编译器的智能度,进而提升开发者的效率,java中叫做语法糖。语法也可以理解为:新的提升开发效率的编译器语法。
语法肯定是有格式的,语法糖略微复杂一点吧。 迭代器语法: 1.实现Iterable接口 的 Iterator方法 返回自定义Iterator实例。
============================================================
|| 我是小布,小布又作小步的意思,哪怕小步前行,也希望自己一直坚持下去!||
============================================================