在java基礎(chǔ)系列之枚舉<二>中進(jìn)一步將枚舉分類/分組實現(xiàn)枚舉的枚舉
舞骆,則需要將其代碼進(jìn)一步修改厅各,以達(dá)到如下要求:
在枚舉E中有枚舉元素A终议、B;
枚舉元素A中有枚舉元素 E1
桃漾、E2
贷盲、E3
淘这、E4
,這些元素類型和元素B是不同類別巩剖,但又都同屬于枚舉類型E; 元素B同理铝穷。
枚舉元素B中有枚舉元素 E01
、E02
佳魔、E03
曙聂、E04
;
這個時候我們需要將枚舉E中元素分類組織起來, 這里需要用到一個Class<T>
類提供的枚舉轉(zhuǎn)型方法:
/**
* Returns the elements of this enum class or null if this
* Class object does not represent an enum type.
*
* @return an array containing the values comprising the enum class
* represented by this Class object in the order they're
* declared, or null if this Class object does not
* represent an enum type
* @since 1.5
*/
public T[] getEnumConstants() {
T[] values = getEnumConstantsShared();
return (values != null) ? values.clone() : null ;
}
利用這個方法,可以獲取到對應(yīng)枚舉類中的所有枚舉元素鞠鲜,且返回與聲明順序一致的枚舉元素數(shù)組宁脊。
下面是測試代碼:
public enum AliEnum {
//歸類
ELEMENT(IAliEnum.Element.class),ERROR(IAliEnum.Error.class) ;
//枚舉的枚舉集合
private IAliEnum[] values ;
private AliEnum(Class<? extends IAliEnum> iClass) {
//
this.values = iClass.getEnumConstants() ;
}
//獲取枚舉的枚舉集合
public IAliEnum[] getValues() {
return this.values;
}
public interface IAliEnum {
//元素解析
enum Element implements IAliEnum {
LICENSENO {
@Override
public String getValue() {
return "LicenseNO" ;
}
},
ENGINNO {
//
@Override
public String getValue() {
return "EnginNo" ;
}
},
VIN {
@Override
public String getValue() {
return "Vin" ;
}
},
USEYEAR {
@Override
public String getValue() {
return "UseYear";
}
};
/**
* <P>獲取元素名</P>
* @return
*/
public abstract String getValue() ;
}
/**
* <P>封裝錯誤消息.</P>
* #author palm
*/
enum Error implements IAliEnum {
//自定義錯誤
SYSERRORCUSTOM {
@Override
public Entry getEntry() {
return new Entry("123456","你xxx") ;
}
@Override
public Entry getEntry(String errorCode, String errorMsg) {
return new Entry(errorCode,errorMsg) ;
}
},
SYSERRORUNDER {
@Override
public Entry getEntry() {
return new Entry("23456","你pass") ;
}
@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>獲取預(yù)定消息.</P>
* @return
*/
public abstract Entry getEntry() ;
/**
* <P>自定義</P>
* @param errorCode
* @param errorMsg
* @return
*/
public abstract Entry getEntry(String errorCode,String errorMsg) ;
}
}
}
//test
AliEnum.IAliEnum[] aliEnums = AliEnum.ELEMENT.getValues() ;
for (AliEnum.IAliEnum aliEnum : aliEnums) {
System.out.println(aliEnum);
}
我知道在MarkDown模式下粘貼代碼格式錯亂修復(fù)的方法了, 從IDEA中復(fù)制出來的代碼不要直接粘貼過來,現(xiàn)在文本模式下過濾一下在粘貼到簡書就行了贤姆。 哈哈哈
額~~ 見笑 ~~~