Java 如何将枚举传递到构造函数中?

Java 如何将枚举传递到构造函数中?,java,constructor,enums,arguments,Java,Constructor,Enums,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 s

我想这样做:

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;
    }

}
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"); 
我们可以这样称呼它:

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;
    }

}
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"); 
有什么办法吗

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

MyEnumTest myET = new myEnumTest(new enum {RED, GREEN, BLUE, YELLOW}, BLUE); 
您可以在不使用enum关键字的情况下使用:

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

public MyEnumTest(MyEnum[] myEnums) {
以及使用:

MyEnumTest myET = new MyEnumTest(new MyEnum[] { MyEnum.FOO, ... });

很难说你想做什么。Reimeus的回答显示了如何使用特定的MyEnum作为参数。如果要实现类以使用任何枚举,请使用以下命令:

public class MyEnumTest<E extends Enum<E>> {

    private final E firstValue;

    public MyEnumTest(Class<E> enumType)
    {
        this.firstValue = enumType.getEnumConstants()[0];
    }

    ...
}

正如其他人所说,很难理解你想做什么,但这里是我最好的猜测:

public enum Color {
    RED, GREEN, YELLOW, BLUE;
}


public class MyEnumTest<E extends Enum<E>> {
    private final Class<E> enumType;
    private final E value; 

    public Class<E> getEnumType() {
        return enumType;
    }

    public E getValue() {
        return value;
    }

    public MyEnumTest(Class<E> enumType, E value) {
        this.enumType = enumType;
        this.value = value;
    }

    public MyEnumTest(Class<E> enumType) {
        this(enumType, enumType.getEnumConstants()[0]);
    }

    public static void main(String... args) {
        // no initial value provided
        MyEnumTest<Color> myET = new MyEnumTest<Color>(Color.class);
        if (myET.getValue() == Color.RED) {
            System.out.println("It's probably an apple");
        }

        // providing an initial value
        myET = new MyEnumTest<Color>(Color.class, Color.YELLOW);
        if (myET.getValue() == Color.YELLOW) {
            System.out.println("It's probably a banana");
        }
    }
}

另外,请记住枚举值是静态的。。。所以,像myET.MyEnum.RED这样的东西没有意义。。。您应该改为使用:Color.RED

注意,值是一个静态方法。+1,您可以让它使用MyEnum。。。varargs使数组创建隐式。您的问题令人困惑-您想专门使用MyEnum还是任何枚举?我希望能够创建一个类的实例,并使用我想要的任何枚举创建它们。+1做得很好,这利用了我绘制的内容,并且很好地按照OP的意图对其进行了建模。