为了账号安全,请及时绑定邮箱和手机立即绑定

如何将对象数组转换为任意内容类型 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 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信