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上使用不了提示需要常數呢?
使用介面要給常數賦初值,你自己寫的沒有給定初值,一定是錯的啊。
switch裡的case需要在編譯期就確定值,而String.class.getSimpleName();需要到運行的時候才能知道(儘管運行的時候確實是常數),所以編譯不能通過
的確是。一個是編譯時要求的知道,一個是runtime(反射的方法都是runtime的)。 之前答錯了-以前看effective java的時候是static final修飾的。同時裡面還有一個建議,匯出常數請使用枚舉類別。
不是說介面中的成員變數都是常數嗎
請問這句話從哪裡聽來的?常數需要使用
static final
修飾,並且需要給定初始值