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



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

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
}

我知道这些名字是无效的,但是有没有其他的方法来实现这一点?

是的,有一种方法-不要使用enum常量名称(不要使用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();}
}

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

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

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

也可以不使用toString()方法,为此定义一个新方法,但这将涉及更改使用enum的代码。

相关内容

  • 没有找到相关文章

最新更新