美文网首页程序员
java基础系列之枚举<二>

java基础系列之枚举<二>

作者: _palm | 来源:发表于2016-02-04 18:41 被阅读83次

    think in Java 上看到 enum的一个对我来说的新用法,是我之前从来没有使用过的, 大概意思是,使用枚举分类/分组,其实也就是普通class的继承用法,比如: 人 --> 学生 ; 人 --> 工人 ; 人 --> 教师 ; 等 .

    大概实现方式如下:

    1. 将多个子类放在一个接口中;
    2. 每个子类实现这个接口;
    interface A {
       enum B implements A {
          E1, E2,E3 ; 
      }
    
      enum F implements A {
        Ea,Eb,Ec ;
      }
    }
    

    如上,枚举B\F 在外界看来都是类型A ; 如此也就达到了统一参数的目的和使用枚举分类间接实现了继承;

    <pre>
    <i>说明:</i>
    我们都知道,枚举enum 在内部实现为继承Enum类, java 不支持多继承, 所以实现java多继承的唯一方法是实现接口.
    </pre>

    示例:

    
    public interface AliEnum {    
    //元素解析    
    enum Element implements AliEnum {       
     LICENSENO {            
    @Override            
    public String getValue() {                
    return "LicenseNO" ;            
    }        
    },        
    ENGINNO {            
    //            
    @Override            
    public String getValue() {                
    return "EnginNo" ;           
    }        
    },
    VIN {            
    @Override            
    public String getValue() {                
    return "Vin" ;            
    }        
    };
            /**         
               * <P>获取元素名</P>         
               * @return         
               */        
    public abstract String getValue() ;    
    }    
    /** 
    * <P>封装错误消息.</P>     
    * #author palm     
    */    
    enum Error implements AliEnum {        
    //自定义错误        
    SYSERRORCUSTOM {            
    @Override            
    public Entry getEntry() {                
    return new Entry("123456","你xxx") ;            
    }            
    @Override            
    public Entry getEntry(String errorCode, String errorMsg) {                
    return new Entry(errorCode,errorMsg) ;            
    }        
    } ;        
    // error box        
    public class Entry {            
    String errorCode ,errorMsg ;            
    Entry(String errorCode,String errorMsg) {                
    this.errorCode = errorCode ;                
    this.errorMsg = errorMsg ;            
    }            
    public String getErrorCode() {                
    return this.errorCode ;            
    }            
    public String getErrorMsg() {                
    return this.errorMsg ;            
    }           
     //change Msg            
    public void setErrorMsg(String errorMsg) {                
    this.errorMsg = errorMsg;           
    }       
    }        
    /**         * <P>获取预定消息.</P>         
    * @return         
    */        
    public abstract Entry getEntry() ;        
    /**         
    * <P>自定义</P>         
    * @param errorCode         
    * @param errorMsg         
    * @return         
    */        
    public abstract  Entry getEntry(String errorCode,String errorMsg) ;    
    }
    }
    

    如此,不管是Element 还是 Error 对于第三方来说都是AliEnum类型.

    在简书粘贴代码为什么不会保留格式呢?

    相关文章

      网友评论

        本文标题:java基础系列之枚举<二>

        本文链接:https://www.haomeiwen.com/subject/lcbekttx.html