我想制作自己的 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);

慕桂英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
參數匹配
添加回答
舉報
0/150
提交
取消