17

考虑我有以下枚举类,

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。相反,如果我们想实例化枚举类并将其作为参数传递,我们需要做什么?

4

9 回答 9

36

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

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

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

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

或者也许传入名称并使用Sample.valueOf

testEnumSample("READ");

...

Sample sample = Sample.valueOf(sampleName);

如果你解释了你想要达到的目标,它会更容易帮助你。

于 2013-05-31T06:54:27.287 回答
18

在内部,枚举将被翻译成这样的东西

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
}

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

于 2013-05-31T06:59:26.650 回答
13

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

于 2013-05-31T06:53:29.783 回答
4

在另一篇文章中检查我的答案。

有2种方式:

使用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
}
于 2017-06-06T07:23:56.090 回答
3

您不能创建新的枚举实例。否则它不会是一个枚举。您可以引用一个已经存在的枚举。如你的例子

 Sample sample = Sample.READ;
于 2013-05-31T06:55:07.533 回答
1

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

您无需创建Enum.

这是一个类似的问题

参考这个

于 2013-05-31T06:57:03.173 回答
0

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

public static void main(String[] args) {

    Sample.READ.testEnumSample();
}

public enum Sample {
    READ,
    WRITE;

    public void testEnumSample() {
        System.out.println(this);
    }
}
于 2017-06-14T13:13:52.393 回答
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

于 2020-05-04T16:44:28.283 回答
-1

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

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

同样,您可以在此处阅读有关它的内容

于 2013-05-31T06:58:23.757 回答