Java枚举常量值不会改变

时间:2012-08-22 13:35:46

标签: java eclipse enums constants

所以这不是其中之一“我想在运行时更改常量值,为什么它不起作用?”问题,就像单挑一样。我在代码中更改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(),结果相同。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

您正在使用msSqlType.toString()方法,您应该使用msSqlType.name()方法。 toString()上的默认enum方法会返回name,但如果您已在DBType类中覆盖它,则不会返回。

 if (typeName.equalsIgnoreCase(msSqlType.name())) {
            this.type = msSqlType;
            return;
        }