如何将 toArray 结果转换为 CompletableFuture<Texture>[] 类型?
How to convert toArray result to a CompletableFuture<Texture>[] type?
我浏览了几十个答案,但他们所做的大部分是建议 string::new
或类似的技巧。在我的例子中,我想要转换的类型是 CompletableFuture<Texture>
。这是这个 POJO:
class ARObject {
CompletableFuture<Texture> texture;
void setTexture(CompletableFuture<Texture> texture) {
Log.d(TAG, String.format("Texture set for %d", resourceId));
this.texture = texture;
}
CompletableFuture<Texture> getTexture() {
return texture;
}
}
由于重构 arObjectList
现在是一个数组。
private ARObject[] arObjectList = {
...
};
(显然这是一个简化,对象有更多的字段)。我想要的只是获得一个 CompletableFuture<Texture>
的数组,这样我就可以将它传递给 CompletableFuture.allOf(...)
。这是我想要的:
CompletableFuture<Texture>[] texturePromises = Stream.of(arObjectList).map(ARObject::getTexture).toArray();
CompletableFuture.allOf(texturePromises)
但是 toArray
return 是 Object[]
根据 IDE。 CompletableFuture<Texture>::new
生成器没有工作,但无论如何这都不是一个好主意,我们不想重新分配或弄乱这些未来。只是 return 它们的数组。传递 new CompletableFuture<Texture>[arObjectList.length]
不编译。
请勿将此问题标记为重复,除非您完全确定并且可以指出解决方案。我通读了十几个条目。
arObjectList
是列表吗?那么明明就是arObjectList.size()
;不是 arObjectlist.length
.
一般来说,混合泛型和数组是行不通的。考虑过时的数组,尤其是非原始数组。 'Pain'(从某种意义上说,你必须跳过障碍,可能会陷入 'raw types',这会导致警告)如果你试图将两者混合,就会随之而来。
一般来说,你不能创建其中包含泛型的数组;这是一个限制。您可以做的是制作一个原始类型的数组并进行转换。
Object o = new List<String>[10]; // illegal
List<String>[] o = (List<String>[]) new List[10]; // legal, but warnings
因此,类似于:
CompletableFuture<Texture>[] texturePromises = (CompletableFuture<Texture>[]) Stream.of(arObjectList).map(ARObject::getTexture).toArray(CompletableFuture[]::new);
会完成这项工作。带有警告。警告是不可避免的;真正的解决方案是停止对几乎所有内容使用数组;当然不要在这里使用它们。
我浏览了几十个答案,但他们所做的大部分是建议 string::new
或类似的技巧。在我的例子中,我想要转换的类型是 CompletableFuture<Texture>
。这是这个 POJO:
class ARObject {
CompletableFuture<Texture> texture;
void setTexture(CompletableFuture<Texture> texture) {
Log.d(TAG, String.format("Texture set for %d", resourceId));
this.texture = texture;
}
CompletableFuture<Texture> getTexture() {
return texture;
}
}
由于重构 arObjectList
现在是一个数组。
private ARObject[] arObjectList = {
...
};
(显然这是一个简化,对象有更多的字段)。我想要的只是获得一个 CompletableFuture<Texture>
的数组,这样我就可以将它传递给 CompletableFuture.allOf(...)
。这是我想要的:
CompletableFuture<Texture>[] texturePromises = Stream.of(arObjectList).map(ARObject::getTexture).toArray();
CompletableFuture.allOf(texturePromises)
但是 toArray
return 是 Object[]
根据 IDE。 CompletableFuture<Texture>::new
生成器没有工作,但无论如何这都不是一个好主意,我们不想重新分配或弄乱这些未来。只是 return 它们的数组。传递 new CompletableFuture<Texture>[arObjectList.length]
不编译。
请勿将此问题标记为重复,除非您完全确定并且可以指出解决方案。我通读了十几个条目。
arObjectList
是列表吗?那么明明就是arObjectList.size()
;不是 arObjectlist.length
.
一般来说,混合泛型和数组是行不通的。考虑过时的数组,尤其是非原始数组。 'Pain'(从某种意义上说,你必须跳过障碍,可能会陷入 'raw types',这会导致警告)如果你试图将两者混合,就会随之而来。
一般来说,你不能创建其中包含泛型的数组;这是一个限制。您可以做的是制作一个原始类型的数组并进行转换。
Object o = new List<String>[10]; // illegal
List<String>[] o = (List<String>[]) new List[10]; // legal, but warnings
因此,类似于:
CompletableFuture<Texture>[] texturePromises = (CompletableFuture<Texture>[]) Stream.of(arObjectList).map(ARObject::getTexture).toArray(CompletableFuture[]::new);
会完成这项工作。带有警告。警告是不可避免的;真正的解决方案是停止对几乎所有内容使用数组;当然不要在这里使用它们。