实例化枚举类

时间:2013-05-31 06:51:43

标签: java enums

考虑我正在使用以下枚举类

public enum Sample {
    READ,
    WRITE
}

在下面的课程中我试图测试枚举类

public class SampleTest {
    public static void main(String[] args) {
        testEnumSample(Sample.READ);
    }

    public static void testEnumSample(Sample sample) {
        System.out.println(sample);
    }
}

在这里,我指定Sample.READ,然后将其作为参数传递给方法testEnumSample。  相反,如果我们想要实例化枚举类并将其作为参数传递给我们需要做什么?

9 个答案:

答案 0 :(得分:23)

  

这里我需要指定Sample.READ将其作为参数传递。相反,如果我们想要实例化枚举类并将其作为参数传递给我们需要做什么?

“实例化枚举类”甚至意味着什么?枚举的要点是有一组固定的值 - 以后不能创建更多。如果你想这样做,你不应该使用枚举。

还有其他获取枚举值的方法。例如,您可以获得第一个声明的值:

testEnumSample(Sample.values()[0]);

或者传递名称并使用Sample.valueOf

testEnumSample("READ");

...

Sample sample = Sample.valueOf(sampleName);

如果您解释了您想要实现的目标,那么它将更容易为您提供帮助。

答案 1 :(得分:12)

在内部,枚举将被翻译为类似

的内容
class Sample extends Enum {
    public static final Sample READ = new Sample("READ", 0);
    public static final Sample WRITE = new Sample("WRITE", 1);

    private Sample(String s, int i)
    {
        super(s, i);
    }

    // More methods, e.g. getter
}

它们不应该也不能被初始化。

答案 2 :(得分:8)

枚举不支持公共构造函数,因此无法实例化。枚举适用于具有一组固定相关常量的情况。将为每个枚举常量创建一个实例。

答案 3 :(得分:2)

您无法创建新的枚举实例。否则它将不是枚举。 您可以引用已存在的枚举。如在你的例子中

 Sample sample = Sample.READ;

答案 4 :(得分:1)

Enum中的元素是作为类实例的对象。

您无需创建Enum的对象。

Here is a similar issue

Refer this

答案 5 :(得分:1)

another post中查看我的答案。

有两种方式:

使用Enum.valueOf()静态函数,然后将其强制转换为枚举类型。

Enum v = Enum.valueOf(TheEnumClass, valueInString);

使用class.getEnumConstants()函数获取枚举常量列表,并循环此列表并获取。

Plugins[] plugins = Plugins.class.getEnumConstants();
for (Plugins plugin: plugins) {
    // use plugin.name() to get name and compare
}

答案 6 :(得分:0)

获取一本关于Java Basics的好书并阅读它。

无论如何,java中的枚举是具有固定数量对象的类,对象由其属性定义。

同样,您可以阅读有关它的内容here

答案 7 :(得分:0)

我回答了第一个问题。你可以这样轻松地做到这一点:

public static void main(String[] args) {

    Sample.READ.testEnumSample();
}

public enum Sample {
    READ,
    WRITE;

    public void testEnumSample() {
        System.out.println(this);
    }
}

答案 8 :(得分:0)

您无法实例化枚举,这就是拥有枚举的全部要点。 例如,在定义某些永远不会改变的东西的属性时,您将使用枚举:

enum TrafficLight {
     RED("stop"),
     YELLOW("look"),
     GREEN("go")
}

私有字符串值;

private TrafficLight(String value) {
    this.value = value;
}
public getValue() {
    return value;
}

现在,如果要获取枚举的值,则可以使用枚举的valueOf方法。静态方法valueOf()和values()在编译时创建,并且不会出现在源代码中。它们确实出现在Javadoc中;

TrafficLight trafficLight = TrafficLight.valueOf("RED")
String value = trafficLight.getValue();

如果您执行TrafficLight.valueOf("XYZ"),它将抛出IllegalArgumentException