Java枚举常量值不会更改
所以这不是我想在运行时更改常量值的方法之一,为什么它不起作用?问题,就像一个头像。在代码中更改Java枚举的值时遇到问题。我已经进行了更改、保存并重新运行了我的程序,但代码中的值仍然保持原来的值。我正在使用Enum.values方法循环遍历枚举常量,该值显示为旧值,而不是我直接在枚举中键入的新值。我开始怀疑我是不是疯了,还是我的程序决定不重新编译我的枚举或是什么。我们欢迎你做一次精神检查。请参阅下文,了解我的枚举代码的全部内容以及访问这些值的位置Java枚举常量值不会更改,java,eclipse,enums,constants,Java,Eclipse,Enums,Constants,所以这不是我想在运行时更改常量值的方法之一,为什么它不起作用?问题,就像一个头像。在代码中更改Java枚举的值时遇到问题。我已经进行了更改、保存并重新运行了我的程序,但代码中的值仍然保持原来的值。我正在使用Enum.values方法循环遍历枚举常量,该值显示为旧值,而不是我直接在枚举中键入的新值。我开始怀疑我是不是疯了,还是我的程序决定不重新编译我的枚举或是什么。我们欢迎你做一次精神检查。请参阅下文,了解我的枚举代码的全部内容以及访问这些值的位置 public enum MSSQLType im
public enum MSSQLType implements DBType {
//String Types
CHAR(8000, -1, null, "CHAR","TEXT"),
VARCHAR(8000, -1, null, "VARCHAR", "TEXT"),
TEXT(-1, -1, null, "TEXT", "TEXT"),
NCHAR(4000, -1, null, "CHAR", "TEXT"),
NVARCHAR(4000, -1, null, "VARCHAR", "TEXT"),
NTEXT(-1, -1, null, "TEXT", "TEXT"),
//Numeric Types
BIGINT(19, -1, null, "BIGINT", "BIGINT"),
BIGINT_IDENTITY (19, -1, null, null, null),
INT(10, -1, null, "INT", "BIGINT"),
SMALLINT(5, -1, null, "SMALLINT", "BIGINT"),
TINYINT(3, -1, null, "TINYINT", "BIGINT"),
BIT(1, -1, null, "TINYINT", "BIGINT"),
DECIMAL(14, 38, null, "DECIMAL", "DECIMAL"),
NUMERIC(14, 38, null, "DECIMAL", "DECIMAL"),
MONEY(15, 4, null, "DECIMAL", "DECIMAL"),
SMALLMONEY(6,4, null, "DECIMAL", "DECIMAL"),
FLOAT(-1, 53, null, "FLOAT", "FLOAT"),
REAL(-1, 106, null, "FLOAT", "FLOAT"),
//Date/time types
DATETIME(-1, -1, "YYYY-mm-DD HH:MM:SS", "DATETIME", "DATETIME"),
SMALLDATETIME(-1, -1, "YYYY-mm-DD HH:MM:SS", "DATETIME", "DATETIME"),
//Other types
BINARY(-1,-1, null, null, null),
VARBINARY(-1,-1, null, null, null),
IMAGE(-1,-1, null, null, null),
CURSOR(-1,-1, null, null, null),
SQL_VARIANT(-1,-1, null, null, null),
TABLE(-1,-1, null, null, null),
TIMESTAMP(-1, -1, "YYYY-mm-DD HH:MM:SS", "DATETIME", "DATETIME"),
UNIQUEIDENTIFIER(-1, -1, null, null, null);
private int size;
private int precision;
private String format;
private String convertTo;
private String fallback;
MSSQLType(int size, int precision, String format, String convertTo, String fallback) {
this.size = size;
this.precision = precision;
this.format = format;
this.convertTo = convertTo;
this.fallback = fallback;
}
public int getSize() {
return size;
}
public int getPrecision() {
return precision;
}
public String getFormat() {
return format;
}
public String getConvertTo() {
return convertTo;
}
public String getFallback() {
return fallback;
}
@Override
public String getDisplay() {
return toString();
}
@Override
public String toString() {
return super.toString().replaceAll("_", " ");
}
}
因此,convertTo和REAL的fallback值被更改为FLOAT,FLOAT从DOUBLE,DOUBLE,但是代码仍然将常量字符串DOUBLE分配给这两个值!读取的值如下所示:
for (MSSQLType msSqlType : MSSQLType.values()) {
if (typeName.equalsIgnoreCase(msSqlType.toString())) {
this.type = msSqlType;
return;
}
}
我还尝试使用MSSQLSTYPE.class.getEnumConstants获得相同的结果
非常感谢您的帮助。您使用的是msSqlType.toString方法您应该使用msSqlType.name方法。
枚举上的默认toString方法返回名称,但若在DBType类中重写了该名称,则不会返回该名称
如果您使用的是MSSQLSTYPE.toString方法,则应使用MSSQLSTYPE.name方法。
枚举上的默认toString方法返回名称,但若在DBType类中重写了该名称,则不会返回该名称
您是否尝试过清理和构建您的项目?不确定它在eclipse中是如何调用的?看起来您的类文件中存在二进制版本不匹配,但客户机中没有编译枚举…是的,这几乎是我的第一个调用端口。甚至尝试删除现有的.class文件并重新构建。只是尝试注释掉REAL,我自己的Type not found异常正如我所期望的那样被抛出。我真的不知所措。我猜你也尝试过将相关类复制到一个新项目中吗?你尝试过清理和构建你的项目吗?不确定它在eclipse中是如何调用的?看起来你的类文件中有一个二进制版本不匹配,枚举没有在客户端编译…是的,这几乎是我的第一个调用端口。甚至尝试删除现有的.class文件并重新构建。只是尝试注释掉REAL,我自己的Type not found异常正如我所期望的那样被抛出。我真的不知所措。我猜你也尝试过将相关类复制到一个新项目中?不幸的是,这不是问题所在。作为实现的一部分,我正在重写toString,但它只做了以下工作:@Override public String toString{return super.toString.replaceAll_quo;,;},我已经确认它在该代码行中返回了正确的字符串,在本例中,该字符串是真实的。不幸的是,这不是问题所在。作为实现的一部分,我正在重写toString,但它所做的就是:@Override public String toString{return super.toString.replaceAll_quo;,;},并且我已经确认它在该代码行中返回了正确的字符串,在本例中,该字符串是真实的。
if (typeName.equalsIgnoreCase(msSqlType.name())) {
this.type = msSqlType;
return;
}