我很清楚在java中使用enum的高级功能。我们也很清楚许多区别于常规课程并告诉他们需要的要点。
任何人都可以提供一些高级枚举示例代码的实际示例吗?哪个可以清楚地阐述
我们应该避免上课和 应该使用枚举
请不要困惑。我不是要求如何使用枚举或枚举的用途。对此有很多问题和答案。我正在寻找一些实时/实时/实际的例子,我们应该避免使用任何其他数据类型。
答案 0 :(得分:3)
通常在使用常量时使用枚举。它们充当为常量提供类型,而不是像int
或String
那样将它们“松散”,就像它们被引入之前一样。
而不是说:
public static final int MALE = 1;
public static final int FEMALE = 2;
你可以说
public enum Gender {
MALE, FEMALE;
}
并将其称为Gender.MALE
和Gender.FEMALE
。
如果没有枚举,setGender
的方法需要接受int
(在上面的示例中),我可以传递除1或2以外的任何内容。那里的代码需要检查是否int
传递映射到常量等。在这种情况下,枚举提供了一种简洁明了的方法。
答案 1 :(得分:3)
您可以将此视为真实世界的示例 -
public class EnumExample
{
public static enum APP_STATUS{
ALL_GOOD(1, "All things are going good"),
WARNING(2, "SOMETHING IS BAD"),
ERROR(3, "Its an Error"),
FATAL(4, "Its crashed");
private String statusMessage;
private int statusId;
private APP_STATUS(int statusId, String statusMessage){
this.statusId = statusId;
this.statusMessage = statusMessage;
}
public int getStatusId(){
return statusId;
}
public String getStatusMessage(){
return statusMessage;
}
public boolean isAttentionRequired(){
if(statusId<3)
return false;
else
return true;
}
}
public void handleAppStatusChange(APP_STATUS newStatus){
if(newStatus.isAttentionRequired()){
//notify admin
}
//Log newStatus.getStatusId() in the logfile
//display newStatus.getStatusMessage() to the App Dash-Board
}
public void Test(){
handleAppStatusChange(APP_STATUS.ALL_GOOD);
handleAppStatusChange(APP_STATUS.WARNING);
handleAppStatusChange(APP_STATUS.FATAL);
}
}
(我假设你知道枚举的所有基础知识......所以,我不在这里解释它们)
答案 2 :(得分:2)
尝试this example:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
用法:
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY: System.out.println("Mondays are bad.");
break;
case FRIDAY: System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY: System.out.println("Weekends are best.");
break;
default: System.out.println("Midweek days are so-so.");
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
}
}
答案 3 :(得分:1)
答案 4 :(得分:1)
你应该看看Chapter 6 Enums and Annotations
的{{1}}(也许是Java Enum的最佳实践),本书的作者( Joshua Bloch )也是JDK的作者{{} 3}},Effective Java (2nd Edition),Enum。
答案 5 :(得分:1)
查看此内容以及其他一些
带构造函数的枚举
enum enumConstr {
HUGE(10), OVERWHELMING(16), BIG(10,"PONDS");//(;)Compulsory
int ounces; String name;
enumConstr(int ounces){ this.ounces = ounces; }
enumConstr(int ounces,String name){
this.ounces = ounces;
this.name = name;
}
public int getOunces(){ return ounces; }
public String getName(){ return name; }
}//Enum completes
public class EnumWithConstr {
enumConstr size;
public static void main(String[] args) {
EnumWithConstr constr = new EnumWithConstr();
constr.size = enumConstr.BIG;
EnumWithConstr constr1 = new EnumWithConstr();
constr1.size = enumConstr.OVERWHELMING;
System.out.println(constr.size.getOunces());//8
System.out.println(constr1.size.getOunces());//16
System.out.println(constr.size.getName());//PONDS
System.out.println(constr1.size.getName());//null
}
}
你永远不能直接调用枚举构造函数。使用您在常量值之后定义的参数自动调用枚举构造函数。
您可以为构造函数定义多个参数,并且可以重载枚举构造函数,就像重载普通类构造函数一样。
答案 6 :(得分:1)
enum
应优先使用class
的最简单示例是单身
enum Singleton {
INSTANCE
}
实例是延迟加载和线程安全的,因为类被延迟加载并且它们的初始化是线程安全的。
这比使用常规类简单得多。
对于实用工具类,我使用enum
井,但这并不常见。
enum Utility {;
public static returnType utilityMethod(args) { ... }
}
答案 7 :(得分:0)
当您知道值是明确定义的时,修复了在编译时已知的值集。
您可以非常轻松地使用枚举(使用EnumSet
),它允许您定义行为,按名称引用元素,打开它们等。