程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 用泛型參數類型構造數組詳解及實例

java 用泛型參數類型構造數組詳解及實例

編輯:關於JAVA

java 用泛型參數類型構造數組詳解及實例。本站提示廣大學習愛好者:(java 用泛型參數類型構造數組詳解及實例)文章只能為提供參考,不一定能成為您想要的結果。以下是java 用泛型參數類型構造數組詳解及實例正文


java 用泛型參數類型構造數組詳解及實例

前言:

前一陣子打代碼的時候突然想到一個問題。平時我們的數組都是作為一個參數傳入方法中的,如果我們要想在方法中創建一個數組怎麼樣呢?在類型明確的情況下,這是沒什麼難度的。如果我們傳入的參數是泛型類型的參數呢?

public static <T> T[] creArray (T obj){
    T[] arr = new T[10];
}

像上面這種用T來直接new數組的方法是錯誤的,會編譯時出現一個:Cannot create a generic array of T. 的錯誤。Java中不支持未知的類型直接創建數組。

最後我得到了這樣一個完美的解決方法:

package Test;

import java.lang.reflect.Array;

/**
 * 
 * @author QuinnNorris
 * 在泛型方法中創建泛型類型的數組
 */
public class Test {
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    String a = "ccc";//創建一個String,作為泛型類型
    String[] ar = creArray(a);
    for(String art :ar)//循環打印
      System.out.println(art);
  }

  //泛型靜態方法
  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個是main中循環迭代出的數組值 
ccc 
null 
null 
null

上述的方法是完全可行的,我們通過用Array類的newInstance方法來構造了可指定類型的數組。使用反射來完成這個工作也應該是在情理之中。因為泛型類型T在中運行時才可能被確定下來,我們能創建泛型數組也必然是在java運行時想辦法,在java運行時能起作用的技術莫過於反射。

另外看見null,正好在這裡也整理一下java中不同類型數組初始化的值情況:

基本類型(數值型):0
基本類型(布爾型):false
基本類型(char型):(char)0
對象類型: null

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved