簡體   English   中英

枚舉getter返回錯誤的值

[英]enum getter returning wrong value

我有一個枚舉類型

public enum Type {
        A("abc1", "desc1"),
        B("abc2", "desc2"),
        C("abc3", "desc3"),
        D("abc4", "desc4"),
        E("abc5", "desc5");

        private String value;
        private String description;

        private Type(String value, String description) {
            this.value = value;
            this.description = description;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }
    }

我通過以下代碼從枚舉中獲取值

Type[] type = Type.values();

for (int i = 0; i < type.length; i++) {
    System.out.println(type[i].getValue());
}

此代碼在服務器上運行。 幾天來,它運行良好,此代碼的輸出如下:

abc1
abc2
abc3
abc4
abc5

但是幾天后,輸出更改為

abc1
abc2
abc1
abc4
abc5

如果我打印說明,那么它們總是正確的。

我無法弄清楚為什么Type.getValue()返回枚舉值C的枚舉值A的值。

您的枚舉是可變的; 有些東西正在調用setValue()

您應該使您的枚舉不可變 -這樣做很有意義。 通過將字段定為最終值並放棄二傳手來使其不可變:

public enum Type {
    A("abc1", "desc1"),
    B("abc2", "desc2"),
    C("abc3", "desc3"),
    D("abc4", "desc4"),
    E("abc5", "desc5");

    private final String value;
    private final String description;

    private Type(String value, String description) {
        this.value = value;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public String getValue() {
        return value;
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM