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