溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java 用泛型參數(shù)類型構(gòu)造數(shù)組詳解及實(shí)例

發(fā)布時(shí)間:2020-09-05 13:17:49 來源:腳本之家 閱讀:115 作者:lqh 欄目:編程語言

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ò)誤的,會編譯時(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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI