簡體   English   中英

為什么公共靜態最終字符串不能在Java開關中使用

[英]why public static final string can not used in java switch

java支持切換字符串,但是在case字段中,如何使用常量字符串? 像這樣:

PhxLog l = new PhxLog();        
for (String s : l.FIELDS) {
        Object v = mapBaseData.getData().get(s);
            switch (s) {
                case l.LOG_FIELD_TIME:   // this is wrong, but how to use a constant instead of a "xxxx"
                    l.setTime((String)v);
                    break;

(貸方為EJP的回答)

JLS中 ,它提到您所用的表達式必須是一個常量表達式。

常量表達式有不同的形式,並且列表中包含字符串內容:

TypeName形式的合格名稱(第6.5.6.2節)。 引用常量變量的標識符(第4.12.4節)。

從您的代碼中,它暗示l.LOG_FIELD_TIME要求,因為l不是TypeName (由for (String s : l) { )。 如果LOG_FIELD_TIME是一個static final字段,則應改用ClassNameOfL.LOG_FIELD_TIME ,這樣事情就可以了。

如何使用常量代替“ xxxx”

你不能 JLS 14.11

每個case標簽都有一個case常量,它可以是常量表達式或枚舉常量的名稱。

static final String的名稱不是常量表達式。

您可以使用一個enum ,如它所說。

暫無
暫無

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

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