Java enum的开发用途

王大叔爱编程 2013-05-06 03:07:31
对于Java当中的枚举,不是很清楚,只知道可以限定运行时方法入参,对于在现实开发中,会在哪儿用到呢?求高手指教。谢谢了。
...全文
213 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2013-05-08
  • 打赏
  • 举报
回复
就目前来看,java的枚举其实和静态属性差不多,但是枚举有个特性,就是能使用在annotation中,静态属性MS不行,这样的话,就可以在annatation中使用比较复杂的类型,二部是简单的基本类型。
BadPattern 2013-05-08
  • 打赏
  • 举报
回复
最后扯一句: 单实例枚举是实现单例模式的最好方法
BadPattern 2013-05-08
  • 打赏
  • 举报
回复
这样,在界面中如果由一种模式切换到另外一种模式,可以直接调用next()得到下一个模式类型,调用它的getDescription()方法就可以得到描述文字了。 楼主可以尝试用其他方法解决这个问题,再比较一下两者的便捷性。 枚举其实也是多例模式的体现,更健壮,也就是说它限制了这个类只有某几个有效实例,所以编写代码时不用担心有非法参数的情况
BadPattern 2013-05-08
  • 打赏
  • 举报
回复
枚举的作用很强大,我在项目中用的很多,套用effective java中的一句话: 很多程序使用枚举都得益于枚举和某些属性相关联。(原话可能不是这样,大意差不多) 举个例子,假设做音乐播放器,播放器有三种模式:不循环->单曲循环->循环,循环最后回绕到不循环,而且这三种模式都自己的描述文字用来展示到界面上,如果不用枚举,得用普通类来实现,比较麻烦,而且不健壮,可读性不好。使用枚举直接这样:
public enum RepeatMode {
	NOREPEAT {
		@Override
		public RepeatMode next() {
			return SINGLE;
		}

		@Override
		public String getDescription() {
			return "不循环";
		}
	},SINGLE {
		@Override
		public RepeatMode next() {
			return REPEAT;
		}

		@Override
		public String getDescription() {
			return "单曲循环";
		}
	},REPEAT {
		@Override
		public RepeatMode next() {
			return NOREPEAT;
		}

		@Override
		public String getDescription() {
			return "循环";
		}
	};
	public int getKey() {
		return ordinal();
	}
	public abstract RepeatMode next();
	public abstract String getDescription();
}
Candylibin 2013-05-08
  • 打赏
  • 举报
回复
如果你有很多 确定的东西 又不想让人更改 只能用你给的这些,设置一个类 专门存放这些常量就没必要了,所以枚举就出现了。 比如日期:
public enum WeekDay
	{
		SUN,MON,TUES,WED,THUR,FIR,SAT;
	}
桃园闲人 2013-05-08
  • 打赏
  • 举报
回复
一般用在某个对象值的取值是有限个的情况,即取值是在某个固定范围内的比如: 性别:男、女 星期:周一、周二、周三、周四、周五、周六、周天 也可以是在某个业务环境中有限个取值的情况,如: 某个职位的级别(只有四个级别):一级、二级、三级、四级。 某个操作只有三种人又权限:系统管理员、管理员、维护员。
lcf 2013-05-07
  • 打赏
  • 举报
回复
myVisitor1是MyVisitor的一个实例。 这只是一个简单的例子,并不是完整的代码。没什么可以运行的东西
王大叔爱编程 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 lcf 的回复:
前一帖打代码的时候不小心按下ctrl+enter就被发出去了。。而且还不能改(弱) 在Visitor Pattern中可以使用enum作为acceptor:
IVisitor {
  void visitState1();
  void visitState2();
}

enum StateEnum {
  State1 {
    public void accept(IVisitor visitor) { 
       visitor.visitState1();
    }
  },
  State2 {
    public void accept(IVisitor visitor) {
      visitor.visitState2();
    }
  }
  public abstract void accpet(IVisitor visitor);
}

class MyVisitor implements Visitor {
  @Override
  void visitState1() {
   // do something
  }
  @Override
  void visitState2() {
   // do something
  }
}

class SomeClass {
  StateEnum state;
  void someMethod() {
    state.accept (myVisitor1);
  }
}
你这代码怎么跑呢?????myVisitor1哪里来的呢??
lcf 2013-05-06
  • 打赏
  • 举报
回复
前一帖打代码的时候不小心按下ctrl+enter就被发出去了。。而且还不能改(弱) 在Visitor Pattern中可以使用enum作为acceptor:
IVisitor {
  void visitState1();
  void visitState2();
}

enum StateEnum {
  State1 {
    public void accept(IVisitor visitor) { 
       visitor.visitState1();
    }
  },
  State2 {
    public void accept(IVisitor visitor) {
      visitor.visitState2();
    }
  }
  public abstract void accpet(IVisitor visitor);
}

class MyVisitor implements Visitor {
  @Override
  void visitState1() {
   // do something
  }
  @Override
  void visitState2() {
   // do something
  }
}

class SomeClass {
  StateEnum state;
  void someMethod() {
    state.accept (myVisitor1);
  }
}
lcf 2013-05-06
  • 打赏
  • 举报
回复
enum singleton:
enum Singleton {
  INSTANCE;
  private int field1;
  private int field2;
  public Singleton () {
     // constructor
     field1 = 8;
  }
  public getField1() {
     return field1;
  }
  public setField2(int val) {
    field2 = val;
  }
 }
enum是C语言中error code的完美替代品 在Visitor Pattern中可以使用enum作为acceptor: IVisitor { void visitState1(); void visitState2(); } enum StateEnum { State1 { public void accept(IVisitor visitor) { visitor.visitState1(); } }, State2 { public void accept(IVisitor visitor) { visitor.visitState2(); } } public abstract void accpet(IVisitor visitor); } class MyVisitor implements Visitor { @Override void visitState1() { } class SomeClass { StateEnum state; void someMethod() { state.accept (myVisitor1); } }

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧