2013-05-13 4 views
-2

я должен работать с библиотекой, которая определяет перечисление, как это:Почему Java запрещает использование статических enums?

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

я получаю это перечисление в качестве аргумента метода:

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

Почему Java запретить использование switch с LibVal enum внутри метода libCallback? Однако, если lib объявила, что его перечисление нестационарно, оно будет работать. Это сбивает с толку, как этого SO-answer государств, что нет действительно никакой разницы ...

Edit:

Как 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

показать, как вы пытаетесь 'switch' , – jlordo

+1

Что такое ошибка компиляции? – NINCOMPOOP

+4

Это не запрещает. Никаких доказательств. Не настоящий вопрос. – EJP

ответ

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

oh Вы правы. Я пробовал 'LibVal.VAL_1', который не работает. Знаете ли вы, почему мне не разрешено использовать LibVal? –

+0

Я не знаю, почему, я просто знаю, что он не будет компилироваться, если вы используете префикс. И для вашей проблемы «ОДИН», я думаю, это потому, что ONE является статическим окончательным int в этой области. – bobkilla

+0

да, конечно. Thats Почему я изначально думал, что я не могу перечислить перечисление вообще ... –

Смежные вопросы