Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java枚举常量值不会更改_Java_Eclipse_Enums_Constants - Fatal编程技术网

Java枚举常量值不会更改

Java枚举常量值不会更改,java,eclipse,enums,constants,Java,Eclipse,Enums,Constants,所以这不是我想在运行时更改常量值的方法之一,为什么它不起作用?问题,就像一个头像。在代码中更改Java枚举的值时遇到问题。我已经进行了更改、保存并重新运行了我的程序,但代码中的值仍然保持原来的值。我正在使用Enum.values方法循环遍历枚举常量,该值显示为旧值,而不是我直接在枚举中键入的新值。我开始怀疑我是不是疯了,还是我的程序决定不重新编译我的枚举或是什么。我们欢迎你做一次精神检查。请参阅下文,了解我的枚举代码的全部内容以及访问这些值的位置 public enum MSSQLType im

所以这不是我想在运行时更改常量值的方法之一,为什么它不起作用?问题,就像一个头像。在代码中更改Java枚举的值时遇到问题。我已经进行了更改、保存并重新运行了我的程序,但代码中的值仍然保持原来的值。我正在使用Enum.values方法循环遍历枚举常量,该值显示为旧值,而不是我直接在枚举中键入的新值。我开始怀疑我是不是疯了,还是我的程序决定不重新编译我的枚举或是什么。我们欢迎你做一次精神检查。请参阅下文,了解我的枚举代码的全部内容以及访问这些值的位置

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;
        }