Java引用内部枚举没有枚举名称

时间:2012-07-10 21:32:32

标签: java enums inner-classes

我有一个带有2选项枚举的Java类。外部类具有枚举的成员实例。我有一个方法切换成员的选项。像这样:

    public class Foo {
        public enum BarEnum {
            OPTION1, OPTION2;
        }

        private BarEnum barmember;

        private void switchBarmember {
            switch (barmember) {
                case OPTION1: barmember = BarEnum.OPTION2; break;
                case OPTION2: barmember = BarEnum.OPTION1; break;

            }
        }
    }

我的问题是,有没有办法在不说BarEnum.的情况下执行更改?换句话说,有没有办法使方法看起来像这样:

        private void switchBarmember {
            switch (barmember) {
                case OPTION1: barmember = OPTION2; break;
                case OPTION2: barmember = OPTION1; break;

            }
        }

如果没办法,请告诉我。谢谢!

3 个答案:

答案 0 :(得分:2)

不完全正确,但这可行:

public class Foo {
    public enum BarEnum {
        OPTION1,
        OPTION2;

        private BarEnum switchValue ( )
        {
            switch( this )
            {
            case OPTION1:
                 return OPTION2;
            case OPTION2:
                 return OPTION1;
            }

            throw new AssertionError("Should not be here");
        }
    }

    private BarEnum barmember;

    private void switchBarmember {
        barmember = barmember.switchValue( );
    }
}

答案 1 :(得分:1)

也许这样:)

class Foo {
    public enum BarEnum {
        OPTION1, OPTION2;
    }
    private BarEnum OPTION1=BarEnum.OPTION1;
    private BarEnum OPTION2=BarEnum.OPTION2;

    private BarEnum barmember;

    private void switchBarmember() {
        switch (barmember) {
            case OPTION1: barmember = OPTION1; break;
            case OPTION2: barmember = OPTION2; break;

        }
    }
}

答案 2 :(得分:1)

除非您创建@Pshemo之类的新字段,否则无法进行此操作。

如果此枚举位于单独的文件中,则可以静态导入枚举常量来实现此目的:

import static foo.TestEnum.ONE;
import foo.TestEnum;

public class StaticImportEnum {
    public static void main (String[] args) {
        TestEnum foo = ONE;
    }
}


package foo;

public enum TestEnum {
    ONE, TWO;
}

但是,您应谨慎使用静态导入,因为它们通常被视为bad practice