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