難得糊塗,吃虧是福。

Writer:BYSocket(泥沙砖瓦浆木匠)

    微博:BYSocket

    豆瓣:BYSocket

Reprint it anywhere u want.

Written In The Font

  When we to set some constants for projects, we always use ‘public static final’to set Int or String constants.Or sometimes,we can also set the paramters in properties.When the project starts,we can get the properties to use them.Today,we can use Enum (JDK 1.5).

Three pieces:
  1. An Example to Know Enum

  2. How to use EnumSet and EnumMap

  3. Enum Analysis

An Example to Know Enum

  Firstly,we use the Enum to implements Operation.

package org.nsg.jdk.testEnum;

/**
 * @Description  OperationTest.java
 *
 * @author BYSocket
 * @date 2015-1-8 6:05:59PM
 * @version 1.0
 */
public class OperationTest
{
	public static void main(String[] args)
	{
		double x = 2.0,y=4.0;
		for (Operation op : Operation.values())
			System.out.printf("%f %s %f = %f%n", x,op,y,op.apply(x, y));
	}
}

enum Operation
{
	PLUS("+")
	{
		double apply(double x,double y){return x + y;}
	},
	MINUS("-")
	{
		double apply(double x,double y){return x - y;}
	},
	TIMES("*")
	{
		double apply(double x,double y){return x * y;}
	},
	DIVIDE("/")
	{
		double apply(double x,double y){return x / y;}
	};
	
	private final String symbol;
	Operation(String symbol){this.symbol = symbol;}
	
	@Override 
	public String toString(){return symbol;}
	
	abstract double apply(double x,double y);
}

  Run as Java application,we can see the Console.The result shows operations

2.000000 + 4.000000 = 6.000000
2.000000 - 4.000000 = -2.000000
2.000000 * 4.000000 = 8.000000
2.000000 / 4.000000 = 0.500000

Q:‘The enum is just like class?’ 

A:Yep,I think that Enum is a nice type.So let us know some methods by apis:

1. Firstly,we can make an abstract method ‘apply()’ ,then set in the constant-specific class body. Its called constant-specific method implementation.

2. We can make constructor with fields to make the enum has vales.(Like String or int …)

3. toString() method : Returns the name of this enum constant, as contained in the declaration. This method may be overridden, though it typically isn’t necessary or desirable. An enum type should override this method when a more programmer-friendly string form exists.

4. ‘vales()’ method :to get all enum objects. And ‘getValue()’ can get the enum object’ value.

 

Note ‘Its easy to learn how to use.Then learn more and study in depth.’ And in real projects,We can use enums to replace Int or String Enum Pattern.And Enum is also a typesafe enum.

How to use EnumSet and EnumMap

  Let us see another example to learn some Sets of Enum.So lets see it:

package org.nsg.jdk.testEnum;

import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Map.Entry;

/**
 * @Description  WeekTest.java
 *
 * @author BYSocket
 * @date 2015-1-9 2:55:10PM
 * @version 1.0
 */
public class WeekTest
{
	public static void main(String[] args)
	{
		EnumSet<Week> weekSet = EnumSet.allOf(Week.class);
		System.out.println("EnumSet:");
		for (Week w : weekSet)
			System.out.println(w);
		
		EnumMap<Week, String> weekMap = new EnumMap<Week, String>(Week.class);
		weekMap.put(Week.MON, "星期一");
		weekMap.put(Week.TUE, "星期二");
		weekMap.put(Week.WED, "星期三");
		
		System.out.println("EnumMap:");
		for (Iterator<Entry<Week, String>> iterator = weekMap.entrySet().iterator(); iterator.hasNext();)
		{
			Entry<Week, String> weekEntry = iterator.next();
			System.out.println(weekEntry.getKey().name()+":"+weekEntry.getValue());
		}
	}
}

enum Week
{
	MON("1"), TUE("2"), WED("3"), THU("4"), FRI("5"), SAT("6"),SUN("7");

	private final String symbol;
	Week(String symbol){this.symbol = symbol;}
	
	@Override 
	public String toString(){return symbol;}
}

We can see in Console:

EnumSet:
1
2
3
4
5
6
7
EnumMap:
MON:星期一
TUE:星期二
WED:星期三

Note: EnumSet or EnumMap is easy for we to use.And with them,we can use enums easily.

Enum Analysis

We use ‘javap -c -private xxx’to know the class:

final class org.nsg.jdk.testEnum.Week extends java.lang.Enum<org.nsg.jdk.testEnu
m.Week> {
  public static final org.nsg.jdk.testEnum.Week MON;

  public static final org.nsg.jdk.testEnum.Week TUE;

  public static final org.nsg.jdk.testEnum.Week WED;

  public static final org.nsg.jdk.testEnum.Week THU;

  public static final org.nsg.jdk.testEnum.Week FRI;

  public static final org.nsg.jdk.testEnum.Week SAT;

  public static final org.nsg.jdk.testEnum.Week SUN;

  private final java.lang.String symbol;

  private static final org.nsg.jdk.testEnum.Week[] $VALUES;

  public static org.nsg.jdk.testEnum.Week[] values();

We can see ‘Enum is a class.just is a class.’but no extends.

 

 

Writer:BYSocket(泥沙砖瓦浆木匠)

    微博:BYSocket

    豆瓣:BYSocket

Reprint it anywhere u want.

有趣的译文 《Java Pattern 那些小事》

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 一、现代的玩具 – Java 可以做很多事 一个 Q 与 A 的对话,展示了 Java...

阅读全文

Java Web 工作技巧总结 16.10

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 在你成为领导者以前,成功只同自己的成长有关。 当你成为领导者以后,成功都...

阅读全文

Java Web 工作技巧总结 16.8

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人。 1. AOP –...

阅读全文

"万千世界,飘过的我是竹叶般..."

博主:BYSocket,博主的\'编程之美\'群(365234583
自言自语:
写写博,编编书,听听歌,健健身,练练字,写写文。医科大信息本科生,开源作者,半吊子书法爱好者,半吊子创业爱好者,半吊子...... 我在试错,我不知道以后会干什么,但我享受现在试错给我的惊讶的生活~

如果你喜欢,可以及时得到博客文章的推送或者留言给我,扫下左边我的公众号

这是我喜欢的一些话:
“路漫漫其修远兮,吾将上下而求索”
任何事情,方向对了,千方百计地去做,做任何事情朝这个方向,物理上的正功也有,负功也有,像溪水向下流碰到石头就转弯,肯定会有小成就。还有最主要的开心~





代码牛平台,让技术学习变的更高效、更简单 !
如果你的技术脆弱得需要提升,向有经验的人学习吧 !
如果你技术足够牛逼,有偿帮助那些需要技术提高的人吧 !


大牛或即将成为大牛的小白,欢迎加入\'代码牛JavaEE技术交流\'群(522369560

来找我吧,扫下左边二维码下载 APP,填上我的邀请码:CaEcmQ ,成为大牛吧~