考虑我正在使用以下枚举类
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
。
相反,如果我们想要实例化枚举类并将其作为参数传递给我们需要做什么?
答案 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)
答案 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)
答案 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