我想制作自己的 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;
}
输出:
true
false
最佳答案
ArrayList.toArray()
总是准确返回Object[]
,从来没有某种子类型。
为此,您需要传入 T[]
或IntFunction<T[]>
作为参数(对于 StreamParser
的构造函数或方法),并在 toArray()
中使用它调用:
arr = cache.toArray(someIntFn.apply(0 /* or cache.size() */));
// Or
arr = cache.toArray(someArray);
关于java - 如何将对象数组转换为任意内容类型 T (Object[] -> T[]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55829914/