gpt4 book ai didi

java - 如何返回通用枚举的枚举元素列表?

转载 作者:行者123 更新时间:2023-12-01 07:09:31 25 4
gpt4 key购买 nike

我正在和 friend 一起制作纸牌游戏,我决定制作一个纸牌查看器,我们将所有纸牌详细信息输入到文本文档中,然后我的程序逐行读取每张纸牌。

不同类型的卡有不同的属性,所有属性都以某种类型的枚举表示。

我有一些代码可以将字符串列表转换为枚举属性列表。枚举示例:

public enum Race{
ELVES, HUMANS, DWARFS
}

public enum Rarity{
COMMON, UNCOMMON, RARE
}

假设一张卡可以有多个种族和多种稀有度,我想创建一个方法,可以接受字符串列表和枚举类型并返回枚举值列表,例如

// Take in an array of strings and a type of Enum value to convert them to
public <Type extends Enum<Type>> Type[] getValues(String[] strings){

// Make an array to hold the enum values
Type[] values = new Type[strings.length];

// For each string, convert it into an enum value and add it to the array
for (int i = 0; i < strings.lenght; i++)
values[i] = Type.valueOf(strings[i]);

return values;
}

我知道这个方法不起作用,但我希望它至少描述了我想要做的事情,我想要一个可以发送任何字符串列表的方法,它会将它们转换为一个列表枚举值,例如将字符串 {"ELVES", HUMANS"} 转换为相关种族值 {ELVES, HUMANS}。

你可能会问为什么我不直接创建单独的方法,例如

convertRaceStings(String[] strings){//method workings here}
convertRarityStings(String[] strings){//method workings here}

不幸的是,这里使用的两个枚举只是简单的示例,还有更多的枚举,每个枚举都需要另一种方法。

最佳答案

您应该使用 EnumSet 而不是枚举数组。它的内存效率更高。作为奖励,您不必搞乱泛型数组。

您的方法将如下所示:

private static <T extends Enum<T>> EnumSet<T> createEnumSet(Class<T> clazz, String... values) {
EnumSet<T> set = EnumSet.noneOf(clazz);
for(String value : values) {
set.add(Enum.valueOf(clazz, value));
}
return set;
}

好吧,除非您需要拥有同一枚举的多个实例。

用法:

final EnumSet<Race> races = createEnumSet(Race.class, "HUMANS", "DWARFS");

关于java - 如何返回通用枚举的枚举元素列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17170799/

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