したがって、これは「実行時に定数値を変更したいのですが、なぜ機能しないのですか?」という問題の 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() も使用してみましたが、同じ結果が得られました。
どんな助けでも感謝します。