2013-05-13 72 views
-2

我有一個定義這樣一個枚舉庫的工作:爲什麼Java不允許開啓靜態枚舉?

public static enum LibVal { 
    VAL_1, 
    VAL_2, 
    VAL_3; 
} 

我得到這個枚舉作爲方法的參數:

public void libCallback(LibVal val){ 
    //.... some implementation 
} 

爲什麼Java的禁止與LibVal使用switchlibCallback方法裏枚舉枚舉?但是,如果lib已經聲明它的枚舉是非靜態的,它就可以工作。這是因爲這SO-answer狀態混亂,真的是有沒有什麼區別?

編輯:

由於bobkilla地說:我想我的開關,它應該被允許內LibVal.VAL_1。 我提供了一個不能工作的代碼示例!

class TestClassForEnum { 
    public static enum TestEnum{ ONE, TWO; } 
} 

class WhichUsesEnumInsideMethod{ 

    //completely unrelated to TestClassForEnum.TestEnum!!! 
    public static final int ONE = 0x1282 

    void doSomethingWithEnum(TestEnum e){ 
     //here I cannot switch: 

     //FORBIDDEN BY JAVA 
     switch (e) { 
      case TestEnum.ONE: 
        //... 

     } 

     //Cannot USE EITHER, because ONE is a static final int inside this scope?!: 
     switch (e) { 
      case ONE: 
        //... 

     } 

} 
+1

展示你是如何想'之開關。 – jlordo 2013-05-13 11:42:19

+1

編譯錯誤是什麼? – NINCOMPOOP 2013-05-13 11:42:39

+4

它不會禁止它。沒有證據。不是一個真正的問題。 – EJP 2013-05-13 11:43:48

回答

2

所有枚舉默認情況下都是靜態的,沒有區別。您可以打開任何枚舉,無論是否使其爲靜態。

在這裏看到這個例子http://ideone.com/n5oQoi

public class Main { 
    public static enum LibVal { 
     VAL_1, 
     VAL_2, 
     VAL_3; 
    } 

    public void libCallback(LibVal val){ 
     switch(val) { 
      case VAL_1: System.out.println("VAL_1 was chosen"); 
     } 
    } 

    public static void main(String[] ignored) { 
     new Main().libCallback(LibVal.VAL_1); 
    } 
} 
1
// your method signature: 
public void libCallback(LibVal val){ 
    switch (val) { 
    case VAL_1: System.out.println("It"); break; 
    case VAL_2: System.out.println("works"); break; 
    case VAL_3: System.out.println("fine"); break; 
    default: System.out.println("here."); 
    } 
} 
5

這是行不通的:

switch(val) { 
      case LibVal.VAL_1: System.out.println("VAL_1 was chosen"); 
     } 

這將工作:

switch(val) { 
      case VAL_1: System.out.println("VAL_1 was chosen"); 
     } 
+0

哦,你是對的。我嘗試了'LibVal.VAL_1',這不起作用。你知道我爲什麼不被允許用LibVal加前綴嗎? – 2013-05-13 12:23:20

+0

我不知道爲什麼,我只知道它不會編譯,如果你使用前綴。而對於你的'一個'問題,我認爲這是因爲ONE在這個範圍內是一個靜態的最終int。 – bobkilla 2013-05-13 12:47:04

+0

當然是的。這就是爲什麼我最初認爲,我不能切換枚舉...... – 2013-05-13 12:50:27