所以这不是其中之一“我想在运行时更改常量值,为什么它不起作用?”问题,就像单挑一样。我在代码中更改Java Enum的值时遇到了问题。我已经进行了更改,保存并重新运行了我的程序,但是代码中的值仍然保留了旧值。我正在使用Enum.values()方法循环我的枚举常量,并且值显示为旧值,而不是我直接键入枚举的新值。我开始怀疑自己是否会失去理智,或者我的程序决定不重新编译我的Enum或者是什么。欢迎进行健全检查。请参阅下面的全部枚举代码以及我访问值的位置。
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("_", " ");
}
}
因此REAL的convertTo和fallback值从“DOUBLE”,“DOUBLE”变为“FLOAT”,“FLOAT”,但代码仍然为这两个值分配常量字符串“DOUBLE”!这些值正如下所示:
for (MSSQLType msSqlType : MSSQLType.values()) {
if (typeName.equalsIgnoreCase(msSqlType.toString())) {
this.type = msSqlType;
return;
}
}
我也尝试过使用MSSQLType.class.getEnumConstants(),结果相同。
任何帮助表示感谢。
答案 0 :(得分:0)
您正在使用msSqlType.toString()
方法,您应该使用msSqlType.name()
方法。
toString()
上的默认enum
方法会返回name
,但如果您已在DBType
类中覆盖它,则不会返回。
if (typeName.equalsIgnoreCase(msSqlType.name())) {
this.type = msSqlType;
return;
}