Java从枚举中检索数据

Java从枚举中检索数据,java,enums,Java,Enums,我在做我的第一个java程序(所以这个问题相对简单)。我开发了一些基本的角色扮演游戏,我研究角色的属性 我的问题是: 如何从我创建的枚举中检索数据(问题在于字符构造函数。我需要根据所选字符类从ClassStats中获取值) 我能否以更好的方式存储每个角色类的属性初始值 首先: ClassStats cs = null; Strength = cs.getStrength(); System.out.println("Strength: " + Strength); Constitution =

我在做我的第一个java程序(所以这个问题相对简单)。我开发了一些基本的角色扮演游戏,我研究角色的属性

我的问题是:

  • 如何从我创建的枚举中检索数据(问题在于字符构造函数。我需要根据所选字符类从ClassStats中获取值)
  • 我能否以更好的方式存储每个角色类的属性初始值
  • 首先:

    ClassStats cs = null;
    Strength = cs.getStrength();
    System.out.println("Strength: " + Strength);
    Constitution = cs.getConstitution();
    Dexterity = cs.getDexterity();
    Intelligence = cs.getIntelligence();
    Wisdom = cs.getWisdom();
    Charisma = cs.getCharisma();
    
    这是行不通的。在第一行中,您将cs设置为“null”,然后尝试通过一些getter访问cs的数据。如何从“null”中获取值

    在java中访问枚举值的工作原理如下

    YourEnum.values()[index];
    
    喜欢

    喜欢

    此外,我会考虑使用像MySQL这样的数据库系统来存储字符类信息——如果您的项目变得更大,这将更容易编辑。这里最常用的是Java持久性API(JPA)

    A)您可以将枚举传入构造函数

    B) 或者,您可以通过
    enumClass.valueOf(strValue)
    从字符串值获取枚举

    C) 或者,更好的是,您可以使用一个工厂类为您生成不同的默认字符

    此外,这两行没有意义:

    ClassStats cs = null;
    Strength = cs.getStrength();
    

    如果将其设置为null,则无法调用对象上的方法。从本质上讲,您可以从构造函数中传递的字符串表示解析枚举,或者如果选择选项2,您将已经有一个ClassStats变量。

    我建议不要使用枚举,使用较少的基本值,并根据这些需要创建对象。每个player类也可以是一个Java类(它们都扩展了一个抽象PlayerClass) 然后角色可以在构造函数中接收一个player类,并询问它默认属性是什么


    在这个程序变大后,我将研究工厂设计模式。

    请遵守Java编码惯例:类型名称(类、接口、枚举)应以大写字母开头(例如,
    BigPicture
    )。方法、变量和字段名称应以小写字母开头(例如,
    bigPicture
    ),常量应全部大写(例如,
    BIG\u PICTURE
    )。另外,强烈建议避免使用与
    java.lang
    (例如
    Character
    )中的类相同的名称来命名您自己的类。我曾考虑过使用抽象类,但有些人建议我在这里使用聚合,因为字符有字符类,而不是字符是字符类。我会检查工厂的设计模式。谢谢是的,一定要使用聚合。我的意思是有一个抽象的CharacterClass,然后每个类都扩展它(小偷扩展CharacterClass)。然后玩家在其构造函数中接收到一个CharacterClass(这将是一个特定的类,例如Rogue),并使用它设置其初始属性。a)在构造函数中添加enum ClassStats就足够了?B)enumClass.valueOf(strValue)会给我所需的属性吗?特定字符类在这里的角色在哪里?是的,我知道null在这里没有意义,ide建议我添加它,但我忘了删除它。@Niminim a/B)我可能误解了你的问题,但我认为问题是如何为给定字符获取适当的ClassStat枚举。空值是由于您有一个未初始化的变量,因此,可能是我误解了您的问题的原因。问题是如何从枚举中获取数据。你能写下如何根据所选的字符类从枚举中检索正确的强度值吗(作为一个例子)?是的,我知道null在这里没有意义,ide建议我添加它,但我忘了删除它。
    YourEnum.values()[index];
    
    YourEnum.YourValue
    
    ClassStats cs = null;
    Strength = cs.getStrength();