2

したがって、これは「実行時に定数値を変更したいのですが、なぜ機能しないのですか?」という問題の 1 つではありません。質問、ちょうどヘッズアップとして。コードで Java Enum の値を変更するのに問題があります。プログラムを変更して保存し、再実行しましたが、コード内の値は古い値のままです。Enum.values() メソッドを使用して Enum 定数を循環させていますが、値は、列挙型に直接入力した新しい値ではなく、古い値として表示されます。私は気が狂っているのか、それとも私のプログラムが 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 値とフォールバック値は、「DOUBLE」、「DOUBLE」から「FLOAT」、「FLOAT」に変更されましたが、コードは定数文字列「DOUBLE」をこれら 2 つの値に割り当てています。値は次のように読み取られます。

for (MSSQLType msSqlType : MSSQLType.values()) {
            if (typeName.equalsIgnoreCase(msSqlType.toString())) {
                this.type = msSqlType;
                return;
            }
        }

MSSQLType.class.getEnumConstants() も使用してみましたが、同じ結果が得られました。

どんな助けでも感謝します。

4

1 に答える 1

0

メソッドを使用しているmsSqlType.toString()メソッドを使用する必要がありますmsSqlType.name()。デフォルトtoString()のメソッドはenum返されますが、クラスnameでオーバーライドした場合は返されません。DBType

 if (typeName.equalsIgnoreCase(msSqlType.name())) {
            this.type = msSqlType;
            return;
        }
于 2012-08-22T14:16:21.977 に答える