2

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

    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;

            }
        }

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

4

3 回答 3

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( );
    }
}
于 2012-07-10T21:39:58.547 回答
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;

        }
    }
}
于 2012-07-10T21:35:55.437 回答
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;
}

但是,您应该谨慎使用静态导入,因为它们通常被认为是不好的做法

于 2012-07-10T21:39:02.587 回答