0
我知道這是一個微不足道的問題,但這完全引起我的興趣;當聲明爲內部類時,switch語句中枚舉值的行爲
作爲(非靜態)不能沒有即使在外層類它的實例被直接訪問成員內部類,
和同時訪問靜態常量u必須與外部類hai.x範圍; 但在「使用枚舉開關作爲case常量」的情況下,它似乎是另一種方式; 看dostuff2()
情況RED:作品,但情況value.RED給出錯誤枚舉開關case標籤必須是枚舉常量的非限定名稱
我知道上述聲明說,這一切;我只是好奇
如果我們假設編譯器墊'價值。 「所有的開關常數.. 爲什麼這是不枚舉正常declartion的情況下,也值v = RED
public class enumvalues
{
public enum values
{
RED,GREEN,VALUE
}
public class hai
{
static final int x=90;
}
public static class statichai
{
}
public static void main(String []args)
{
}
public void dostuff2(values v)
{
// v =RED this is illegal
// System.out.println(RED); this will not compile because it cannot be accessed directly
// System.out.println(x); this will not compile because it cannot be accessed directly
switch(v)
{
case RED: //use of value.RED is strictly forbidden
System.out.println("red");
}
}
}
您是否嘗試過'value.RED'或'values.RED'? (在後者的'values'中注意's') – Abubakkar
枚舉值通常必須是合格的。僅用於開關情況下,提供了簡短的符號。 _這就是全部._ –
這只是Java編程語言的一個規則。 「爲什麼」這個問題沒有明確的答案。因爲Java語言的設計者認爲這是一個好主意。已經清楚你打開哪種類型的枚舉類型,因此在'case'中使用'values.RED'而不是'RED'只會是不必要的冗長。 – Jesper