gpt4 book ai didi

java - 如何构造通用可变参数的 EnumSet?

转载 作者:行者123 更新时间:2023-12-01 09:39:50 28 4
gpt4 key购买 nike

假设我想做如下的事情:

public static <V> Set<V> setOf(V... elem)
{
Set<V> set = null;
if (elem[0] instanceof Enum)
set = Sets.newEnumSet(elem, elem[0].getClass()); OR
set = EnumSet.<V>noneOf(elem[0].getClass());
return set;
}

这些或其他几种变体似乎都不起作用。有人可以向我解释一下发生了什么事吗?我看过How do I get the type object of a genericized Enum?和其他一些类似的问题,但我仍然无法让它发挥作用。

最佳答案

首先,您需要确保类型 V仅限于枚举类型;您可以通过指定 V 来做到这一点必须extends Enum<V> .

然后,您需要提供Class的枚举类型。由于类型删除,您将无法在运行时派生它。这是必需的,因为要构造一个新的空 EnumSet ,您需要指定元素的类型。

最后,您有多种方法来创建该集合,但最简单的可能是使用 Stream API:

@SafeVarargs
public static <V extends Enum<V>> Set<V> setOf(Class<V> enumClass, V... elem) {
return Arrays.stream(elem).collect(Collectors.toCollection(() -> EnumSet.noneOf(enumClass)));
}

请注意,如果您可以保证至少有 1 个元素,则可以使用 EnumSet.copyOf(Arrays.asList(elem))无需通过类(class)。

关于java - 如何构造通用可变参数的 EnumSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547397/

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