[英]Enum, private final String odd behaviour
我經歷了奇怪的行為。 主要是,如果我將longName和iconPath聲明為私有最終String,則有時會發生這些字段值被破壞的情況,它們具有的值超出了預期。 但是,如果我將變量類型更改為private final Pair<String, String> data;
它工作正常,ArrayList也可以。 可能是什么原因? 我猜是String變量,由於最后一項,它是不可變的(盡管,它確實會改變其值)。
package package.enums;
import package.MessageUtils;
public enum QuestionType {
SIMPLE (
MessageUtils.getBundle("survey.question.type.SIMPLE"),
"/resources/images/question_default.png"
),
COMPLEX (
MessageUtils.getBundle("survey.question.type.COMPLEX"),
"/resources/images/question_default.png"
)
// etcetera
;
private final String longName;
private final String iconPath;
private QuestionType(String longName, String iconPath) {
this.longName = longName;
this.iconPath = iconPath;
}
public String getLongName() {
return longName;
}
public String getIconPath() {
return iconPath;
}
}
在我看來,這是“不可能發生”的情況。
對於final
未正確初始化的唯一半合理的解釋是與線程相關的問題。 然而:
String
值絕對是不可變的並且是線程安全的, final
字段是線程安全的,並且 enum
類初始化的一部分執行,並且對此也有保證。 簡而言之:在您展示給我們的代碼中,它不可能是線程問題。
這給我留下了奇怪的解釋,例如:
final
字段,或者 還是...在某些尚待確定的情況下, MessageUtils.getBundle
返回錯誤的字符串。
這段代碼可能有點誤導,我不能僅僅發布應用程序的整個代碼。
或者...您的真實代碼在某些重要方面不同於此代碼。 請提供一個簡單的自包含完整示例(SSCCE),否則我們不太可能確定真正的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.