概述
Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。本文综合多篇文章后,总结了Java 泛型的相关知识,希望可以提升你对Java中泛型的认知效率。
定义泛型类
package com.xfw.producer.generics;
import lombok.Data;
/**
* 泛型类
*
* @author xusj
* <br>CreateDate 2022/8/4 18:03
*/
@Data
public class MyResponse<T> {
/**
* 默认成功
*/
private String msg = "success";
/**
* 默认200,有错误自己定义
*/
private Integer code = 200;
/**
* 使用泛型封装
*/
private T data;
/**
* 初始化构造方法一
*/
public MyResponse(T data) {
this.data = data;
}
public MyResponse(String msg, Integer code, T data) {
this.msg = msg;
this.code = code;
this.data = data;
}
/**
* 定义静态构造方法将data结果封装到结果中一
*/
public static <T> MyResponse success(T data) {
// 封装返回一个对象给前端
return new MyResponse(data);
}
/**
* 定义静态构造方法将data结果封装到结果中二
*/
public static <T> MyResponse success(T data, String msg, int code) {
// 封装返回一个对象给前端
return new MyResponse(msg, code, data);
}
}
测试
- 封装类
package com.xfw.producer.generics;
import lombok.Data;
/**
* @author xusj
* <br>CreateDate 2022/8/4 18:11
*/
@Data
public class User {
private String name;
private int age;
}
- 测试类
package com.xfw.producer.generics;
import com.alibaba.fastjson.JSON;
/**
* @author xusj
* <br>CreateDate 2022/8/4 18:12
*/
public class Test {
public static void main(String[] args) {
User user = new User();
user.setName("laozi");
user.setAge(10000);
System.out.println(JSON.toJSONString(MyResponse.success(user)));
}
}
总结
泛型方法
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
下面是定义泛型方法的规则:
所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 )。
每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。
java 中泛型标记符:
E – Element (在集合中使用,因为集合中存放的是元素)
T – Type(Java 类)
K – Key(键)
V – Value(值)
N – Number(数值类型)
? – 表示不确定的 java 类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96208.html