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

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


红颜莎娜
浏览 100回答 2
2回答

手掌心

ArrayList.toArray()总是准确返回Object[],从不返回某个子类型。为此,您需要传入 aT[]或IntFunction<T[]>作为参数(传递给 的构造函数StreamParser或方法),并在toArray()调用中使用 this :arr = cache.toArray(someIntFn.apply(0 /* or cache.size() */));// Orarr = cache.toArray(someArray);

慕桂英546537

您应该使用第二种方法 toArray 带一个额外的参数。这是 javadoc 链接:https ://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object%5B%5D%29关于创建泛型数组,这里是做它所需的技巧:public&nbsp;static&nbsp;<T>&nbsp;T[]&nbsp;genArray(Class<T>&nbsp;clazz,&nbsp;int&nbsp;size){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(T[])&nbsp;Array.newInstance(clazz,&nbsp;size); &nbsp;&nbsp;&nbsp;&nbsp;}这意味着要执行一个额外的步骤,您需要让实际的类与该T参数匹配
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java