好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java 自定义可继承枚举Enum的案例

一、定义enum抽象类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

public class AbstractEnum {

  private static final Map<String, AbstractEnum> nameEnumMap = new ConcurrentHashMap<>();

  @Getter

  protected String name;

  protected AbstractEnum () {

  }

 

  protected AbstractEnum(String name) {

   this .name = name;

   if (!nameEnumMap.containsKey(name)) {

    nameEnumMap.put(name, this );

   }

  }

 

  public boolean equals(AbstractEnum abstractEnum) {

   return this .name == null || abstractEnum == null ? false : this .name.equals(abstractEnum.getName());

  }

 

  public String toString() {

   return this .name;

  }

 

  public static AbstractEnum valueOf(String name) {

   if (name == null )

    throw new NullPointerException( "Name is null" );

 

   AbstractEnum result = nameEnumMap.get(name);

   if (result != null ) {

    return result;

   }

 

   throw new IllegalArgumentException(

     "No enum constant exists, name is." + name);

  }

 

  public static void init() {

  }

 

}

二、实际继承enum,与enum使用方法一致

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public class TypeEnum extends AbstractEnum {

  private static final Map<String, TypeEnum> nameEnumMap = new ConcurrentHashMap<>();

  protected TypeEnum(String name) {

  super (name);

  if (!nameEnumMap.containsKey(name)) {

  nameEnumMap.put(name, this );

  }

  }

 

  public static TypeEnum valueOf(String name) {

  if (name == null )

  throw new NullPointerException( "Name is null" );

 

  TypeEnum result = nameEnumMap.get(name);

  if (result != null ) {

  return result;

  }

 

  throw new IllegalArgumentException(

  "No enum constant exists, name is." + name);

  }

 

  public static final TypeEnum TYPE_ONE = new TypeEnum( "TYPE_ONE" );

}

三、可继续继承枚举,进行枚举分类。

补充:Java中自定义枚举(Enum)项的值,可设置为指定的值

一、代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package base.lang;

/**

  * ClassName: StateEnum

  * @Description: TODO

  * @author fuming

  * @date 2016年11月27日

  */

public enum StateEnum

{

//添加枚举的指定常量

online( 10 ),

offline( 20 );

//必须增加一个构造函数,变量,得到该变量的值

private int mState= 0 ;

private StateEnum( int value)

{

mState=value;

}

/**

* @return 枚举变量实际返回值

*/

  public int getState()

  {

  return mState;

  }

}

二、示例

?

1

2

3

4

//enum

StateEnum orderState=StateEnum.offline;

//orderState=StateEnum.online;

System.out.println( "state=" + orderState.getState());

三、打印结果

?

1

state= 20   //测试正常

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/jiangxuexuanshuang/article/details/87911048

查看更多关于java 自定义可继承枚举Enum的案例的详细内容...

  阅读:22次