Ali p9は、Javaカスタム継承可能列挙型列挙型のケースを3分で教えてくれます

この記事では主に、参照値が適切なjavaカスタム継承可能列挙型列挙型のケースを紹介します。これがすべての人に役立つことを願っています。エディターをフォローして見てみましょう

1つは、列挙型抽象クラスを定義する

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

第二に、列挙型の使用と一致する列挙型の実際の継承

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.列挙型は、列挙型分類のために引き続き継承できます。
補足:Javaのカスタム列挙(列挙)アイテムの値は、指定された値に設定できます

1つは、コードです

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

2、例

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

3、結果を印刷する

state=20  //测试正常

上記は個人的な経験ですので、参考にしていただきたいと思いますので、編集者のサポートをお願いします。間違いや十分に考慮されていない場合は、遠慮なく私に教えてください。

おすすめ

転載: blog.csdn.net/dcj19980805/article/details/115246222
おすすめ