前言
网络上很多讲泛型的文章,肯定比我讲得好很多,所以,我就避其锋芒,讲一讲我在开发的过程中为什么要使用泛型,运用实际的例子,来描述使用泛型有什么好处。
首先要知道泛型有什么作用,一开始听到这个名词的时候,我就在猜测,应该就是用于表述不确定的值,结果真的是这样,当我们不知道要表述这个值或者这个类是哪一类的时候,泛型就登场了。
代码
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类是不确定的,总不能定义一个返回值就新增一个类,于是就要考虑使用泛型。
- DTO
数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器) - 作用
作用其实就是当API借口返回给前端的时候,我给返回值进行封装一下,因为我们返回的时候可能不需要所有的数据,可能需要添加一些提示信息,例如返回的时候我想给返回值加一个提示数字和解释用于归类判断 - 返回值
{
"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有什么用,所以在学生时代的时候,我最多只是照着书敲,并没有记到脑子里,也不知道有什么用法,这运用到实战当中还是需要知其所以然的。