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上使用不了提示需要常數呢?
習慣沉默2017-06-23 09:15:11
switch裡的case需要在編譯期就確定值,而String.class.getSimpleName();需要到運行的時候才能知道(儘管運行的時候確實是常數),所以編譯不能通過
过去多啦不再A梦2017-06-23 09:15:11
的確是。一個是編譯時要求的知道,一個是runtime(反射的方法都是runtime的)。 之前答錯了-以前看effective java的時候是static final修飾的。同時裡面還有一個建議,匯出常數請使用枚舉類別。