java - 接口中的成員變量怎么不是常量了?
問(wèn)題描述
switch (from) { case TAGs.casts://constant expression requiredbreak;}//我的TAGs.casts是這樣的public interface TAGs { String casts = String.class.getSimpleName();}//如果寫(xiě)成這個(gè)樣子就可以編譯public interface TAGs { String casts = 'String';}
不是說(shuō)接口中的成員變量都是常量嗎?為什么在case上使用不了提示需要常量呢?
問(wèn)題解答
回答1:使用接口要給常量賦初值,你自己寫(xiě)的沒(méi)有給定初值,肯定是錯(cuò)的啊。
回答2:switch里的case需要在編譯期就確定值,而String.class.getSimpleName();需要到運(yùn)行的時(shí)候才能知道(盡管運(yùn)行的時(shí)候確實(shí)是常量),所以編譯不能通過(guò)
回答3:的確是。一個(gè)是編譯時(shí)要求的知道,一個(gè)是runtime(反射的方法都是runtime的)。之前答錯(cuò)了——以前看effective java的時(shí)候是static final修飾的的。同時(shí)里面還有一個(gè)建議,導(dǎo)出常量請(qǐng)使用枚舉類(lèi)。
回答4:不是說(shuō)接口中的成員變量都是常量嗎請(qǐng)問(wèn)這句話(huà)從哪里聽(tīng)來(lái)的?常量需要使用static final修飾,并且需要給定初始值
相關(guān)文章:
1. ubuntu PPA 更新老是不成功該怎么辦2. django - 后臺(tái)返回的json數(shù)據(jù)經(jīng)過(guò)Base64加密,獲取時(shí)用python如何解密~!3. 老哥們求助啊4. node.js - node 客戶(hù)端socket一直報(bào)錯(cuò)Error: read ECONNRESET,用php的socket沒(méi)問(wèn)題哈。。5. angular.js - 如何通俗易懂的解釋“依賴(lài)注入”?6. css3 - 請(qǐng)問(wèn)一下在移動(dòng)端CSS布局布局中通常需要用到哪些元素,屬性?7. 我的html頁(yè)面一提交,網(wǎng)頁(yè)便顯示出了我的php代碼,求問(wèn)是什么原因?8. tp6表單令牌9. javascript - vue-router怎么不能實(shí)現(xiàn)跳轉(zhuǎn)呢10. html5 - angularjs中外部模版加載無(wú)法使用
