Java 使用 HashMap 和 switch 语句

标签 java hashmap switch-statement case class-constants

我有一个常量类,我在其中保存了常量的 HashMap,例如:

import java.util.HashMap;
import java.util.Map;

/**
 * Constantes de uso general en el programa.
 */
public final class Consts {

    // Opciones del menu de juego.
    public static final Map<Integer, String> GAMETYPE;
    static
    {
        GAMETYPE = new HashMap<>();
        GAMETYPE.put(1, "MANUAL");
        GAMETYPE.put(2, "AUTOMATIC");
        GAMETYPE.put(3, "EXIT");
    }

    /**
     *
     * @param userType
     * @return
     */
    public static String valueOf(int userType) {
        return GAMETYPE.get(userType);
    }
    /**
     * Impide construir objetos de esta clase.
     */
    private Consts(){
        // Tampoco permite a la clase nativa llamar al constructor.
        throw new AssertionError();
    }
}

我想在另一个类的 switch-case 语句中使用这个常量,例如:

userType = sc.nextInt();
switch(Consts.valueOf(userType)) {
    case MANUAL:
        System.out.println(">> You have selected the manual mode");
        break;
    case AUTO:
        System.out.println(">> You have selected the manual mode");
        break;
    case EXIT:
        System.out.println(">> Good-bye");
        break;

程序仍然找不到手动、自动或退出。有什么想法吗?

PS:我不想使用枚举(这就是我现在构造常量的方式,但我认为拥有许多常量类的事实使得很难遵循代码)并且我不想像这样一一声明常量:

public static final int MANUAL = 1; 
public static final int AUTO = 2; 
public static final int EXIT = 3; 

因为我希望在常量类中构造常量。谢谢!

最佳答案

如果您使用的是 Java 7 或更高版本,您可以执行以下操作:

switch(Consts.valueOf(userType)) {
case "MANUAL"://notice quotes..
    System.out.println(">> You have selected the manual mode");
    break;
case "AUTO":
    System.out.println(">> You have selected the manual mode");
    break;
case "EXIT":
    System.out.println(">> Good-bye");

关于Java 使用 HashMap 和 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28781011/

相关文章:

java - 在字符串中第一次出现整数时拆分字符串

java - 重写 JPA @Embedded 列上的排序行为

arrays - 关于顺序和重复唯一地组合数组项

java - 具有多个键和值的 HashMap ?

c++ - 内部编译器错误 - 开关表达式中的模板化转换运算符

java - AXIS Web 服务中的 URL

java - 如果您不使用返回值,Class.forName() 有什么用途?

java - 如何在 FreeMarker 中迭代 HashMap?

Golang switch 语句

c# - 开关盒编程实践