搜尋

首頁  >  問答  >  主體

java - 介面中的成員變數怎麼不是常數了?

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_u1582phpcn_u15822711 天前834

全部回覆(4)我來回復

  • 滿天的星座

    滿天的星座2017-06-23 09:15:11

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

    回覆
    0
  • 習慣沉默

    習慣沉默2017-06-23 09:15:11

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

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-23 09:15:11

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-06-23 09:15:11

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

    回覆
    0
  • 取消回覆