美文网首页程序员
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