java - 如何将对象数组转换为任意内容类型 T (Object[] -> T[])

标签 java arrays casting stream content-type

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

相关文章:

java - 即使我处理了异常并且文件确实存在,我仍然收到 "FileNotFoundException"。

java - Orika 嵌套属性扁平化

java - Primefaces:dataTable 内的 inputMask

javascript - 将颜色从数组设置为多个元素

大型数组的Java纯粹存在导致大量内存尖峰

c++ - 如何更新具有兼容性的 C/C++ 结构

Java SSL 握手失败

java - 需要为用户生成每个学生的卷号吗?

c++ - 将 void* 映射回其原始类型

c# - 将整个对象数组转换为字符串