对Java泛型的简单理解
本人新手,看到“泛型”就心里发怵,“课本”讲得简单,网上搜的感觉迷糊。经过一番揣摩,有如下心得。
大神们说,泛型,即“参数化类型”。刚读这句话,如坠云雾,现在有些清晰了。
先理解此中的“类型”:在这样一行代码中
Box name = new Box();
Box就是实例name的类型。
再理解 “参数化”类型:编写了一个处理“String类型数据”的类Box,较复杂,但挺好使。假如现在还要编写一个处理Integer类型的类,且此类构造与Box一模一样,仅仅是内部处理的数据类型不一样,怎么办,是不是再重新写一遍代码?大可不必。其实在写Box类时,将处理不同类型数据这个需求也考虑进去,就能解决重复写代码,低效、易错的问题。于是大神们在Box后面加了个尖括号,括号里是要处理的数据类型,重写Box类,并用如下代码创建对象:
Box<String> name = new Box<>();或
Box<Integer> name = new Box<>();
尖括号中的内容可以理解成一种“参数”,形如Box<String
>等含有不同参数的“类型”,就叫“参数化类型”,即泛型。泛,广泛,多的意思,很多种类型即泛型,尖括号里放进去一种参数,就变成一种类型。
再举个例子。
一模一样的汽车,工厂生产了很多辆。一辆写上“蔬菜”两个字,并用来运蔬菜,就是蔬菜型车;写上“客运”,并用来拉客,就变成了客运型车…其中蔬菜(西红柿、黄瓜、豆角等)、乘客(老人、小孩、孕妇等)等就是要处理的数据。转换成代码就是:
Car<Vagetable> vagetable = new Car<>(); // 或
Car<Passenger> passenger = new Car<>();
其中Car<?> 就是一个类型,一个“参数化”类型,一个泛型。其中的“参数”(如Vagetable),可以看作这个类型的组成部分,用以约束此类的功能(能干什么,不能干什么)。
以上即是对泛型的粗浅理解,希望对初学者有所帮助。至于对泛型全面、细致、严谨的介绍还需要认真阅读相关资料,以免误人子弟。