Почему «final static int» может использоваться в качестве константы case для переключателя, но не «final static < your enum> ”

Почему этот переключатель int действителен:


public class Foo {
    private final static int ONE = 1;
    private final static int TWO = 2;

    public static void main(String[] args) {
        int value = 1;
        switch (value) {
            case ONE: break;
            case TWO: break;
        }
    }

}

В то время как этот переключатель enum не является:


import java.lang.annotation.RetentionPolicy;

public class Foo {
    private final static RetentionPolicy RT = RetentionPolicy.RUNTIME;
    private final static RetentionPolicy SRC = RetentionPolicy.SOURCE;

    public static void main(String[] args) {
        RetentionPolicy value = RetentionPolicy.RUNTIME;
        switch (value) {
            case RT: break;
            case SRC: break;
        }
    }

}

Я знаю, что то, что идет в case, должно быть константой, так почему я могу использовать "final static int" как константа, но не как «final static »?

20
задан Martin York 9 December 2010 в 18:28
поделиться