java如何返回通用枚举的枚举元素列表?
我正在和一个朋友做一个纸牌游戏,我决定做一个纸牌查看器,我们将所有的纸牌细节输入一个文本文档,我的程序逐行读取每张纸牌
不同类型的卡具有不同的属性,所有属性都在某种类型的枚举中表示
我有一些将字符串列表转换为枚举属性列表的代码。示例枚举:
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;
}
我知道这个方法不起作用,但我希望它至少描述了我正在尝试做的事情,我想要一个方法,我可以发送任何字符串列表,它将它们转换为枚举值列表,例如,将字符串{“精灵”,人类}转换为相关的种族值{精灵,人类}
你可能会问,为什么我不单独制作一些方法,比如
convertRaceStings(String[] strings){//method workings here}
convertRarityStings(String[] strings){//method workings here}
不幸的是,这里使用的两个枚举都是简单的示例,还有更多的枚举需要另一个方法
# 1 楼答案
Java中的枚举非常强大。由于枚举是常量,无法动态添加,因此可以执行以下操作:
这假设您使用的是Java 7,但如果不是,则用else if语句替换开关
# 2 楼答案
您应该使用枚举集而不是枚举数组。它的内存效率更高。 作为奖励,您不必处理泛型数组
然后,您的方法将如下所示:
除非您需要具有同一枚举的多个实例
用法:
# 3 楼答案
如果还传递了枚举类型,则会更容易—这将使您能够使用^{} static method :
如果不想将enum类作为第二个参数传递,则需要在某个位置维护映射
# 4 楼答案
在通用代码中使用数组有点烦人
这应该行得通