springboot中java泛型使用
生活随笔
收集整理的这篇文章主要介绍了
springboot中java泛型使用
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
前言
java中泛型的使用非常普及,泛型在项目中的使用往往能达到事半功倍的效果,基础知识就不普及了,网上太多了,主要介绍几种典型的用法。1.泛型类的使用
1)创建一个简单的的泛型类泛型类的标志就是类后面通常以<T>为标记,在用该类创建对象的时候,T传递的类型是什么,给data泛型变量赋值就是什么类型。
//这里@Builder注解的用途是:在创建该类的对象时,可以用类名.builder.属性名1(值1).属性名2(值2).build方式构建,替换new创建对象的方式 @Builder @Data @NoArgsConstructor @AllArgsConstructor public class ApiResponse<T> {private String code;private String message;private T data; } 2)使用单元测试框架测试一把。 @SpringBootTest @Slf4j class WebapitestApplicationTests {@Testvoid contextLoads() {/*** ApiResponse.<String>builder()中的<String>代表给T传递String类型,* 同时给后面的data赋值时要传递String类型,如果给data传递其他类型会提示报错。* 理论上可以给T传递任意类型(Object的子类)*/ApiResponse<String> build = ApiResponse.<String>builder().code("200").message("成功").data("aaaaaaaaaaaa").build();log.info("输出日志 build:{}",build);/*** ApiResponse.<Integer>builder()中的<Integer>代表给T传递Integer类型,* 同时给后面的data赋值时要传递Integer类型,如果给data传递其他类型会提示报错。*/ApiResponse<Integer> build1 = ApiResponse.<Integer>builder().code("500").message("失败").data(250).build();log.info("输出日志 build1:{}",build1);} } 3)输出结果: demo.WebapitestApplicationTests : 输出日志 build:ApiResponse(code=200, message=成功, data=aaaaaaaaaaaa) demo.WebapitestApplicationTests : 输出日志 build1:ApiResponse(code=500, message=失败, data=250)2.泛型静态方式的使用(无返回值)
1)在上面的泛型类中增加一个无返回值的泛型静态方法,代码如下。我们知道静态方法的调用不需要创建对象,通过类.静态方法直接调用,所以ApiResponse<T>这个泛型类中的T对静态方法不起作用,它只对这个类中的非静态成员变量起作用。
@Builder @Data @NoArgsConstructor @AllArgsConstructor public class ApiResponse<T> {private String code;private String message;private T data;/*** 该静态方法用来输出外部调用传入的实参对应的数据类型* 格式:在返回值void前面加泛型<T>用来接收调用方传递的数据类型,同时* 传递的实参t一定要属于这个类型 */public static <T> void testStaticMethod(T t){System.out.println(t.getClass().getTypeName());} } 2)调用静态方法 @SpringBootTest @Slf4j class WebapitestApplicationTests {@Testvoid contextLoads() {/*** 调用静态方法* 注意:* 1、ApiResponse.<String>中的String代表调用时希望传入的类型,* 同时方法后面的实参"hello-world"一定要是这个类型,否则报错。* 2、testStaticMethod 虽然是类 ApiResponse<T> 中的方法,但是该* 静态方法中的<T>并不是ApiResponse<T>中的T,这点要清楚。*/ApiResponse.<String> testStaticMethod("hello-world");ApiResponse.<Integer> testStaticMethod(888);} } 3)输出结果: java.lang.String java.lang.Integer2.泛型静态方式的使用(有返回值)
1)在上面的泛型类中再增加一个有返回值的泛型静态方法,代码如下。同样,ApiResponse<T>这个泛型类中的T对静态方法不起作用,它只对这个类中的非静态成员变量起作用。
@Builder @Data @NoArgsConstructor @AllArgsConstructor public class ApiResponse<T> {private String code;private String message;private T data;/*** 该静态方法根据调用方传入的T类型的实参t,返回一个ApiResponse<T>对象* 实现原理:外部传入一个T数据类型的实参t,方法体内根据这个T类型,创建* 一个ApiResponse<T>对象,并进行初始化,对data这个泛型变量赋予传入的* T类型的实参t,最后返回该对象* */public static <T> ApiResponse<T> testStaticMethodReturn(T t){ApiResponse<T> listApiResponse = ApiResponse.<T>builder().code("503").message("服务失败").data(t).build();return listApiResponse;} } 2)调用该静态方法 @SpringBootTest @Slf4j class WebapitestApplicationTests {@Testvoid contextLoads() {List<String> stringList = new ArrayList<String>();stringList.add("username");stringList.add("password");stringList.add("age");stringList.add("education");/*** 调用该静态方法时,泛型T传入List类型,并传递实参stringList,* 最后方法返回ApiResponse<List>对象并打印出来。*/ApiResponse<List> listApiResponse = ApiResponse.<List>testStaticMethodReturn(stringList);log.info("打印ApiResponse值:{}",listApiResponse);} } 3)输出结果: demo.WebapitestApplicationTests : 打印ApiResponse值:ApiResponse(code=503, message=服务失败, data=[username, password, age, education])总结
以上是生活随笔为你收集整理的springboot中java泛型使用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Springboot使用JPA框架对数据
- 下一篇: java中ArrayList与Linke