The Case of java Custom Inheritable Enumeration Enum

  • 2021-08-28 20:06:13
  • OfStack

1. Define the enum abstract class


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() {
 }
 
}

2. Actual inheritance of enum, and use method 1 of enum


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");
}

3. You can continue to inherit enumeration and classify enumeration.

Supplement: The value of the custom enumeration (Enum) item in Java can be set to the specified value

1. Code


package base.lang;
/**
 * ClassName: StateEnum 
 * @Description: TODO
 * @author fuming
 * @date 2016 Year 11 Month 27 Day 
 */
public enum StateEnum
{
// Adds the specified constant of the enumeration 
online(10),
offline(20);
// Must be increased 1 Constructor , Variable , Get the value of the variable 
private int mState=0;
private StateEnum(int value)
{
mState=value;
}
/**
* @return  Actual return value of enumeration variable 
*/
 public int getState()
 {
 return mState;
 } 
}

2. Examples


 //enum
 StateEnum orderState=StateEnum.offline;
 //orderState=StateEnum.online;
 System.out.println("state="+ orderState.getState()); 

3. Print the results


state=20  // Test normal 

Related articles: