网络上很多讲泛型的文章,肯定比我讲得好很多,所以,我就避其锋芒,讲一讲我在开发的过程中为什么要使用泛型,运用实际的例子,来描述使用泛型有什么好处。
首先要知道泛型有什么作用,一开始听到这个名词的时候,我就在猜测,应该就是用于表述不确定的值,结果真的是这样,当我们不知道要表述这个值或者这个类是哪一类的时候,泛型就登场了。
package com.caeser.project.dto; public class EntityMetaExe<T> { private T data; private Meta meta; public T getData() { return data; } public void setData(T data) { this.data = data; } public Meta getMeta() { return meta; } public void setMeta(Meta meta) { this.meta = meta; } }
不拿代码讲故事的程序员不是好程序员,上面一串简短的dto代码就使用了泛型,而且是泛型类,其中private T data
是由外部定义的,这个代码意思就是,在使用这个泛型类的时候,先要指定我要使用哪个类
EntityMetaExe<Ship> resultExe=new EntityMetaExe<Ship>(); Meta meta = new Meta();
例如上面代码,指定了T为Ship类
就是在返回参数的时候,很多时候都是一个实体类+一个提示信息
也就是某个entity类和一个提示类,其中entity类是不确定的,总不能定义一个返回值就新增一个类,于是就要考虑使用泛型。
{ "result": { "authlist": [ { "id": 1, "userId": 1, "userName": "Caeser", "priority": 1, "account": "admin1" } ], "meta": { "msg": "查询成功", "status": 2000 } } }
在上述返回值JSON串里,其中authlist表示的就是其中一个entity类,meta就是提示信息,这样使用泛型,会使你的代码优雅,而且简洁。
泛型也没那么好用,例如有时候我的返回值,可能需要A参数,有时候又不需要A参数,当参数发生动态变化的时候,类里的值就是不固定的,这个时候,返回什么怎么返回就会很复杂,定义一个不确定的类就将面临接口的解释很复杂,于是就不要使用泛型,而是给接口的使用,一个明确的定义,当需要A参数的时候就定义已带A参数的返回值,不需要就定义一个不带A参数的返回值即可。
除了泛型类,还有泛型接口、泛型方法、泛型通配符,很多来描述类当中或者方法当中的不确定性的,其实就是为了方便程序员在使用不确定的值来定义值的。
最开始,学习Java的时候,就已经接触了泛型,但是一直不能在实战中登场,因为我只知道有这么个T,但是不知道这个T有什么用,所以在学生时代的时候,我最多只是照着书敲,并没有记到脑子里,也不知道有什么用法,这运用到实战当中还是需要知其所以然的。