在Java中使用枚举的最常见方法是什么?
鉴于我需要在类构造函数或工厂方法参数中使用枚举,我能想到的第一件事就是在我的类中包含公共静态enum
并导入它。
package mypackage;
import mypackage.Data.ContentType;
class Data {
public static enum ContentType { TYPE1, TYPE2, TYPE3 }
ContentType type;
String value;
public Data( String value, ContentType type ) {
this.value = value;
this.type = type;
}
}
使用示例:new Data( "some value", ContentType.TYPE1 );
。
人们更喜欢使用如下建筑的原因是什么?
public static final int TYPE1 = 1;
public static final int TYPE2 = 2;
public static final int TYPE3 = 3;
答案 0 :(得分:3)
我毫不犹豫地将此称为“常用”用法,但枚举非常适合制作some kinds of state machines。
答案 1 :(得分:1)
好问题。 Enum
最适合用于:
Januar
,可能会输入错误,但如果使用Enum
,则会在语法上进行检查。答案 2 :(得分:1)
考虑这样的事情(在现实世界的例子中可能没什么用,但它用于向你展示一些功能)
public enum Operations{ ADD,SUB,...;
public int execute(int a, int b)
{
switch(this)
{
case ADD:
return a+b;
case SUB:
return a-b;
....
}
}
}
现在你可以有方法
public int execute(Operations op,int a, int b)
{
return op.execute(a,b);
}
为不同的枚举值
返回不同的结果答案 3 :(得分:0)
使用枚举提供了一系列明显的优势,因为如果switch语句中缺少任何一个,编译器会检查你,并且不能使用声明的值之外的值。
有些人可能会继续使用常量,或者因为他们的代码可能被编译成其他语言。主要是因为它们没有遇到枚举,在大多数情况下,Enum比这些常量更好。
答案 4 :(得分:0)
这是我宣布为Enum的一个类,以及下面的几个原因:
- 通过合成包含Award引用的对象不需要在每次添加一个新的Award对象时创建它(Read 使用Enums与使用Singletons)。
- 由于Enums是实例控制的,当我需要比较奖励时,我可以使用==运算符而不是.equals(),并保存自己 (悲惨)CPU时间。
- 总的来说,当你有机会从一个集合中重用现有的不可变对象而不是创建新的对象时,使用Enums。
醇>
public enum Award {
/*List of possible awards */
FIRST_AWARD("FIRST_AWARD", "FIRST_AWARD_IN_THE_LIST", "./firstAward.jpg"),
SECOND_AWARD("SECOND_AWARD", "SECOND_AWARD_IN_THE_LIST", "./secondAward.jpg"),
THIRD_AWARD("THIRD_AWARD", "THIRD_AWARD_IN_THE_LIST", "./thirdAward.jpg");
private final String name;
private final String description;
private final String imageLink;
Award (String name, String description, String imageLink){
this.name = name;
this.description = description;
this.imageLink = imageLink;
}
...
}