java 用泛型參數(shù)類型構(gòu)造數(shù)組詳解及實(shí)例
java 用泛型參數(shù)類型構(gòu)造數(shù)組詳解及實(shí)例
前言:
前一陣子打代碼的時(shí)候突然想到一個(gè)問題。平時(shí)我們的數(shù)組都是作為一個(gè)參數(shù)傳入方法中的,如果我們要想在方法中創(chuàng)建一個(gè)數(shù)組怎么樣呢?在類型明確的情況下,這是沒什么難度的。如果我們傳入的參數(shù)是泛型類型的參數(shù)呢?
public static <T> T[] creArray (T obj){ T[] arr = new T[10]; }
像上面這種用T來直接new數(shù)組的方法是錯(cuò)誤的,會(huì)編譯時(shí)出現(xiàn)一個(gè):Cannot create a generic array of T. 的錯(cuò)誤。Java中不支持未知的類型直接創(chuàng)建數(shù)組。
最后我得到了這樣一個(gè)完美的解決方法:
package Test; import java.lang.reflect.Array; /** * * @author QuinnNorris * 在泛型方法中創(chuàng)建泛型類型的數(shù)組 */ public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String a = "ccc";//創(chuàng)建一個(gè)String,作為泛型類型 String[] ar = creArray(a); for(String art :ar)//循環(huán)打印 System.out.println(art); } //泛型靜態(tài)方法 public static <T> T[] creArray (T obj){ T[] arr = (T[])Array.newInstance(obj.getClass(), 5); arr[1] = obj; System.out.println(arr[1]); return arr; } }
代碼輸出如下:
ccc //方法中輸出的arr[1] null //以下5個(gè)是main中循環(huán)迭代出的數(shù)組值 ccc null null null
上述的方法是完全可行的,我們通過用Array類的newInstance方法來構(gòu)造了可指定類型的數(shù)組。使用反射來完成這個(gè)工作也應(yīng)該是在情理之中。因?yàn)榉盒皖愋蚑在中運(yùn)行時(shí)才可能被確定下來,我們能創(chuàng)建泛型數(shù)組也必然是在java運(yùn)行時(shí)想辦法,在java運(yùn)行時(shí)能起作用的技術(shù)莫過于反射。
另外看見null,正好在這里也整理一下java中不同類型數(shù)組初始化的值情況:
基本類型(數(shù)值型):0
基本類型(布爾型):false
基本類型(char型):(char)0
對象類型: null
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
JavaWEB項(xiàng)目之如何配置動(dòng)態(tài)數(shù)據(jù)源
這篇文章主要介紹了JavaWEB項(xiàng)目之如何配置動(dòng)態(tài)數(shù)據(jù)源問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Spring MVC結(jié)合Spring Data JPA實(shí)現(xiàn)按條件查詢和分頁
這篇文章主要為大家詳細(xì)介紹了Spring MVC結(jié)合Spring Data JPA實(shí)現(xiàn)按條件查詢,以及分頁效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10一文帶你徹底了解Java8中的Lambda,函數(shù)式接口和Stream
這篇文章主要為大家詳細(xì)介紹了解Java8中的Lambda,函數(shù)式接口和Stream的用法和原理,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-08-08單點(diǎn)登錄的概念及SpringBoot實(shí)現(xiàn)單點(diǎn)登錄的操作方法
在本文中,我們將使用Spring Boot構(gòu)建一個(gè)基本的單點(diǎn)登錄系統(tǒng),我們將介紹如何使用Spring Security和JSON Web Tokens(JWTs)來實(shí)現(xiàn)單點(diǎn)登錄功能,本文假設(shè)您已經(jīng)熟悉Spring Boot和Spring Security,感興趣的朋友一起看看吧2024-10-10Java語言實(shí)現(xiàn)簡單FTP軟件 FTP協(xié)議分析(1)
這篇文章主要介紹了Java語言實(shí)現(xiàn)簡單FTP軟件的第一篇,針對FTP協(xié)議進(jìn)行分析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03SpringBoot使用spring.factories加載默認(rèn)配置的實(shí)現(xiàn)代碼
在日常開發(fā)過程中,發(fā)布一些產(chǎn)品或者框架時(shí),會(huì)遇到某些功能需要一些配置才能正常運(yùn)行,這時(shí)我們需要的提供默認(rèn)配置項(xiàng),同時(shí)用戶也能覆蓋進(jìn)行個(gè)性化2024-06-06java數(shù)據(jù)結(jié)構(gòu)之java實(shí)現(xiàn)棧
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧,需要的朋友可以參考下2014-03-03