在java基础系列之枚举<二>中进一步将枚举分类/分组实现枚举的枚举
,则需要将其代码进一步修改,以达到如下要求:
在枚举E中有枚举元素A、B;
枚举元素A中有枚举元素 E1
、E2
、E3
、E4
,这些元素类型和元素B是不同类别,但又都同属于枚举类型E; 元素B同理。
枚举元素B中有枚举元素 E01
、E02
、E03
、E04
;
这个时候我们需要将枚举E中元素分类组织起来, 这里需要用到一个Class<T>
类提供的枚举转型方法:
/**
* 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 ;
}
利用这个方法,可以获取到对应枚举类中的所有枚举元素,且返回与声明顺序一致的枚举元素数组。
下面是测试代码:
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>获取预定消息.</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模式下粘贴代码格式错乱修复的方法了, 从IDEA中复制出来的代码不要直接粘贴过来,现在文本模式下过滤一下在粘贴到简书就行了。 哈哈哈
额~~ 见笑 ~~~