java - 处理枚举的 Java 最佳实践是什么

标签 java

嗨,我了解 Java 很长时间了,最​​近我一直在深入研究 Java 世界。 作为一名经验丰富的 c# 开发人员,我发现使用 Java 枚举很奇怪。 例如,如果我在控制台上显示以下项目:

public enum AdminOpertionFirstlayer 
{MANAGE_SUPPLY,
 MANAGE_CUSTOMERS_SERVICE,
 ORDERS_MANAGEMENT,
 REPORTING_OPRATIONES}

我发现很难将它们写下来给用户,因为我必须定义新变量

*AdminOpertionFirstlayer []adminOpertionFirstlayerArr =
     AdminOpertionFirstlayer.values();

为了实现这个:

for (int i = 0; i < adminOpertionFirstlayerArr.length; i++) {
    String s = String.format("%d. %s",
                             i+1,
                             adminOpertionFirstlayerArr[i].toString());
    Screen.print(s);
}

AdminOpertionFirstlayer chosen= adminOpertionFirstlayerArr 
                                [(Integer.parseInt(dataIn.readLine()))-1];

但我觉得在 * 上声明是一种不好的做法

  1. 是否有最佳实践(枚举扩展是一个...)?
  2. 是否有可用的 TryParse 或每次解析时我都应该尝试并捕获?

谢谢

编辑

这样做是否易于理解和阅读?

  public enum MainMenuOptiones{

    ADMIN {public void secondLayerMenu(){
      Main.AdminSecondLayerMenu();}},

    CUSTOMER{public void secondLayerMenu(){
       Main.customerSecondLayerMenu();}},

    EXIT{public void secondLayerMenu(){
        System.exit(1);}},

    UNAPPLICABLE{public void secondLayerMenu(){
        Screen.printToScreen("chice doesnt exist  try again");}};

    abstract public void secondLayerMenu();
}

phrphes 并没有使用所有的 switch 机制 我可以用

 enumInstance.secondLayerMenu();

最佳答案

您可以使用 Java 的增强 for 循环(以及枚举的序数值)

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
    String s = String.format("%d. %s", operator.ordinal(), operator);
    Screen.print(s);
}

然后您可以使用序数值重新创建枚举:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.values()[(Integer.parseInt(dataIn.readLine()))];

或者您可以使用名称:

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) {
    String s = String.format("%s. %s", operator.name(), operator);
    Screen.print(s);
}

然后您可以使用 valueOf 值重新创建枚举:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.valueOf(dataIn.readLine()];

关于java - 处理枚举的 Java 最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290738/

相关文章:

java - readTree Jackson无法解析

java - spring-boot 的 gradle 插件 bootRepackage 任务给出弃用警告

java - 如何从以微单位表示的给定金额中提取单位和子单位部分?

java - 我需要帮助使包含许多逻辑运算符的 if 语句更容易

java - JAX-RS - Wink - 使用 Wink 客户端读取文件的正确方法

java:类初始化时对同一个类的静态字段进行初始化

java - 有没有办法在java中创建一个范围?

javascript - Kotlin JS 和 GWT 互操作

java - 如何使用 JSP/JSF 为 POST 请求设置超时

Java:可以调用未知参数的函数