如何将枚举传递给构造函数?

dwj*_*ton 0 java enums constructor arguments

我想做这样的事情:

public class MyEnumTest {

    public enum MyEnum;
    private MyEnum value;

    public MyEnumTest(enum e)
    {
        this.MyEnum = e; 
        this.value = this.MyEnum.values[0]//Set value to the first enum value.
    }

    public void setValue(MyEnum e)
    {
        this.value = e; 
    }

    public MyEnum getValue()
    {
        return value;
    }

}
Run Code Online (Sandbox Code Playgroud)

并称之为:

MyEnumTest car = new MyEnumTest({HONDA, FORD, TOYOTA, HOLDEN}); 
MyEnumTest fruit = new MyEnumTest({APPLE, BANANA, CHERRY}); 

/* some operations occur*/ 

if (car.getValue() == car.FORD) System.out.println("Vrooom!"); 
if (fruit.getValue()) == fruit.APPLE) System.out.println ("Is red and round and delicious"); 
Run Code Online (Sandbox Code Playgroud)

这样做的任何想法?

对于奖励标记 - 是否可以使用枚举值设置初始值?例如

MyEnumTest myET = new myEnumTest(new enum {RED, GREEN, BLUE, YELLOW}, BLUE); 
Run Code Online (Sandbox Code Playgroud)

Rei*_*eus 6

你可以使用(没有enum关键字):

public MyEnumTest(MyEnum e)
{
    this.myEnum = e; 
    this.value = MyEnum.values()[0];
}
Run Code Online (Sandbox Code Playgroud)

对于第2部分,您可以定义重载的构造函数:

public MyEnumTest(MyEnum[] myEnums) {
Run Code Online (Sandbox Code Playgroud)

并使用:

MyEnumTest myET = new MyEnumTest(new MyEnum[] { MyEnum.FOO, ... });
Run Code Online (Sandbox Code Playgroud)