java - 接口中的成員變量怎么不是常量了?
問題描述
switch (from) { case TAGs.casts://constant expression requiredbreak;}//我的TAGs.casts是這樣的public interface TAGs { String casts = String.class.getSimpleName();}//如果寫成這個(gè)樣子就可以編譯public interface TAGs { String casts = 'String';}
不是說接口中的成員變量都是常量嗎?為什么在case上使用不了提示需要常量呢?
問題解答
回答1:使用接口要給常量賦初值,你自己寫的沒有給定初值,肯定是錯(cuò)的啊。
回答2:switch里的case需要在編譯期就確定值,而String.class.getSimpleName();需要到運(yùn)行的時(shí)候才能知道(盡管運(yùn)行的時(shí)候確實(shí)是常量),所以編譯不能通過
回答3:的確是。一個(gè)是編譯時(shí)要求的知道,一個(gè)是runtime(反射的方法都是runtime的)。之前答錯(cuò)了——以前看effective java的時(shí)候是static final修飾的的。同時(shí)里面還有一個(gè)建議,導(dǎo)出常量請(qǐng)使用枚舉類。
回答4:不是說接口中的成員變量都是常量嗎請(qǐng)問這句話從哪里聽來的?常量需要使用static final修飾,并且需要給定初始值
相關(guān)文章:
1. 在windows下安裝docker Toolbox 啟動(dòng)Docker Quickstart Terminal 失敗!2. docker - 如何修改運(yùn)行中容器的配置3. dockerfile - [docker build image失敗- npm install]4. docker不顯示端口映射呢?5. nignx - docker內(nèi)nginx 80端口被占用6. docker綁定了nginx端口 外部訪問不到7. angular.js - angular內(nèi)容過長(zhǎng)展開收起效果8. 為什么我ping不通我的docker容器呢???9. debian - docker依賴的aufs-tools源碼哪里可以找到啊?10. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?
