gpt4 book ai didi

Java:通用方法 - 将元素添加到 vararg

转载 作者:行者123 更新时间:2023-12-01 21:24:50 25 4
gpt4 key购买 nike

我想在这里这样做,它实际上有效,但不知何故我不认为这是一个好的解决方案:

class A5<T> implements A4<T> {

private final T[] elements;

A5(T... elements) {
this.elements = elements;
}


public <R> A5<R> map(Function<T, R> function) {
List<R> liste = new LinkedList<>();
for (T element : elements) {
liste.add(function.apply(element));
}
Object[] objects = new Object[liste.size()];
int counter = 0;
for (R element : liste) {
objects[counter] = liste.get(counter++);
}
return new A5(objects);
}
}

对我来说,Object[] 是一个问题,但我无法创建 R[] 数组。有人有解决办法吗?更改 CTOR 和 map 签名不是我想要的。只能改变 body 。

最佳答案

您无法创建通用数组,因此除非您更改 T[]List<T>上课A5您需要创建一个 Object[]

不过你的代码可以简化一点。您可以使用 Java 8 Stream 来映射元素并将它们收集到 Object[]然后转换此 Object[]R[]@SuppressWarnings("unchecked")隐藏未经检查的强制转换产生的警告:

class A5<T> implements A4<T> {

private final T[] elements;

A5(T... elements) {
this.elements = elements;
}

@SuppressWarnings("unchecked")
public <R> A5<R> map(Function<T, R> function) {
return new A5<>((R[]) Arrays.stream(elements).map(function).toArray());
}
}

关于Java:通用方法 - 将元素添加到 vararg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38329548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com