亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將對象數組轉換為任意內容類型 T (Object[] -> T[])

如何將對象數組轉換為任意內容類型 T (Object[] -> T[])

紅顏莎娜 2022-10-20 17:28:39
我想制作自己的 Java 流來輕松解析一些字符串。但我無法將對象數組轉換為 T 數組。我已經嘗試過的://  T[]  <-       Object[]     arr = (T[]) cache.toArray();和    T[] a = new T[6]; // Cannot create a generic array of T    int index = 0;    for (T i : arr) {     a[++index] = i;    }代碼:public StreamParser<T> forEach(Consumer<? super T> action) {        ArrayList<T> cache = new ArrayList<T>();        for (T i : arr) {            action.accept(i);            cache.add(i);        }        System.out.println(arr instanceof String[]);        arr = (T[]) cache.toArray();        System.out.println(arr instanceof String[]);        return this;    }輸出:truefalse
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

ArrayList.toArray()總是準確返回Object[],從不返回某個子類型。


為此,您需要傳入 aT[]或IntFunction<T[]>作為參數(傳遞給 的構造函數StreamParser或方法),并在toArray()調用中使用 this :


arr = cache.toArray(someIntFn.apply(0 /* or cache.size() */));

// Or

arr = cache.toArray(someArray);


查看完整回答
反對 回復 2022-10-20
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

您應該使用第二種方法 toArray 帶一個額外的參數。這是 javadoc 鏈接:https ://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object%5B%5D%29

關于創建泛型數組,這里是做它所需的技巧:

public static <T> T[] genArray(Class<T> clazz, int size){
    return (T[]) Array.newInstance(clazz, size);
    }

這意味著要執行一個額外的步驟,您需要讓實際的類與該T參數匹配


查看完整回答
反對 回復 2022-10-20
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號