gpt4 book ai didi

java - 类型转换通用数组

转载 作者:行者123 更新时间:2023-12-01 17:41:57 24 4
gpt4 key购买 nike

我正在尝试创建一个接收两个数组的通用交集函数,该函数将返回一个具有通用性的数组。以下是使用我目前拥有的示例。

public static <T> T[] Intersection(T[] v1, T[] v2) {
HashSet<T> set = new HashSet<>();
set.addAll(Arrays.asList(v1));
set.retainAll(Arrays.asList(v2));

T[] v3 = {};
v3 = set.toArray(v3);
return v3;
}

上面代码的问题是: T[] v3 = {} 导致以下错误 Cannot create a generic array of T 。如果我将代码更改为以下内容,我会收到一条警告,指出类型安全:未检查从 Object[] 到 T[] 的转换

public static <T> T[] Intersection(T[] v1, T[] v2) {
HashSet<T> set = new HashSet<>();
set.addAll(Arrays.asList(v1));
set.retainAll(Arrays.asList(v2));

T[] v3 = (T[])set.toArray();
return v3;
}

有没有安全的方法来实现这一点?

最佳答案

java 中的数组通常不可转换。这就是为什么所有集合都有 2 个 toArray 方法:Object [] toArray ()<T> T[] toArray (T[] array) 。如果运行时无法知道数组类型,则必须处理 Object[]。在您的情况下,您有所需类型的 v1 和 v2,因此可以使用 Arrays.copyOf 并键入 toArray。

T[] v3 = set.toArray(Arrays.copyOf(v1, set.size()));

关于java - 类型转换通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009207/

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