java - 介面中的成員變數怎麼不是常數了?
phpcn_u1582
phpcn_u1582 2017-06-23 09:13:11
0
4
837
switch (from) {
            case TAGs.casts://constant expression required
                break;
        }
        
//我的TAGs.casts是这样的
public interface TAGs {
    String casts = String.class.getSimpleName();
}

//如果写成这个样子就可以编译
public interface TAGs {
    String casts = "String";
}

不是說介面中的成員變數都是常數嗎?為什麼在case上使用不了提示需要常數呢?

phpcn_u1582
phpcn_u1582

全部回覆(4)
滿天的星座

使用介面要給常數賦初值,你自己寫的沒有給定初值,一定是錯的啊。

習慣沉默

switch裡的case需要在編譯期就確定值,而String.class.getSimpleName();需要到運行的時候才能知道(儘管運行的時候確實是常數),所以編譯不能通過

过去多啦不再A梦

的確是。一個是編譯時要求的知道,一個是runtime(反射的方法都是runtime的)。 之前答錯了-以前看effective java的時候是static final修飾的。同時裡面還有一個建議,匯出常數請使用枚舉類別。

大家讲道理

不是說介面中的成員變數都是常數嗎請問這句話從哪裡聽來的?
常數需要使用static final修飾,並且需要給定初始值

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板