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

以@(“at”符号)开头的Java变量,java,enums,hashmap,naming-conventions,Java,Enums,Hashmap,Naming Conventions,我在枚举中有一些变量,出于某种原因必须以“@”开头,例如: public enum PR304MainDb { @MODE, @USERID, @ROLES, @MAX_DOC_COUNT } 我使用这些变量的方式是将它们放在HashMap中…: 我知道这些名称是无效的,但有没有其他方法可以实现这一点?是的,有一种方法-不要使用枚举常量名称,不要使用_constant.toString作为名称 与其他类一样,枚举可以有字段和方法。一些可能性: public en

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

public enum PR304MainDb {
    @MODE,
    @USERID,
    @ROLES,
    @MAX_DOC_COUNT
}
我使用这些变量的方式是将它们放在HashMap中…:


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

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

您也可以通过定义一个新的方法来使用ToStand方法,但是这将涉及改变使用EnUn.< /P>的代码。您可能想考虑一个带有EnUM键的HASMAP实际上是正确的工具。我已经回答了这个问题。这个name函数是什么?返回枚举常量的名称,与toString相同。文档中说,当您想要确切的名称时使用name,当您想要向用户显示某个内容时使用toString。他们一定有理由这么说——也许他们将来会改变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();}
}
public enum PR304MainDb {
    MODE,
    USERID,
    ROLES,
    MAX_DOC_COUNT;


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