以@(" at"符号)开头的Java变量

时间:2014-03-19 10:00:11

标签: java enums hashmap naming-conventions

我在枚举中有一些变量,出于某种原因必须以'@'开头,例如:

public enum PR304MainDb {
    @MODE,
    @USERID,
    @ROLES,
    @MAX_DOC_COUNT
}

我使用这些变量的方法是将它们放在 HashMap ...中:

Map<String, Object> in = new HashMap<String, Object>();
in.put(PR304MainDb.@MODE.toString(), 5);

...然后在调用存储过程时使用HashMap作为参数(这些代码我无法更改)。

在通话结束后,我也会阅读结果并进行一些比较,例如:

if (out.getKey().equals(PR304MainDb.@MAX_DOC_COUNT.toString())) {
//DO SOMETHING
}

我知道这些名称无效,但有没有其他方法可以实现这一目标?

2 个答案:

答案 0 :(得分:5)

是的,有办法 - 不要使用枚举常量名称(不要使用YOUR_CONSTANT.toString()作为名称)。

与其他类一样,枚举可以包含字段和方法。一些可能性:

public enum PR304MainDb_Possibility1 {
    MODE("@MODE"),
    USERID("@USERID"),
    ROLES("@ROLES"),
    MAX_DOC_COUNT("@MAX_DOC_COUNT");

    private PR304MainDb_Possibility1(String text) {
        this.text = text;
    }

    public final String text;
}

public enum PR304MainDb_Possibility2 {
    MODE,
    USERID,
    ROLES,
    MAX_DOC_COUNT;

    public String getText() {return "@" + name();}
}

答案 1 :(得分:3)

您不能在符号名称中使用@,但您可以做的是覆盖toString方法:

public enum PR304MainDb {
    MODE,
    USERID,
    ROLES,
    MAX_DOC_COUNT;


    @override
    String toString() {
        return "@"+super.toString();
    }
}

您也可以通过为此目的定义新方法而不使用toString()方法,但这将涉及更改使用枚举的代码。