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的意图对其进行了建模。