在think in Java 上看到 enum
的一个对我来说的新用法,是我之前从来没有使用过的, 大概意思是,使用枚举分类/分组,其实也就是普通class
的继承用法,比如: 人 --> 学生 ; 人 --> 工人 ; 人 --> 教师 ; 等 .
大概实现方式如下:
- 将多个子类放在一个接口中;
- 每个子类实现这个接口;
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
类型.
在简书粘贴代码为什么不会保留格式呢?
网友评论