枚举的遍历
@TestEnumClassAnno(target = SystemVersionEnum.class)
public enum SystemVersionEnum {
@TestEnumAnno(target = String.class, des = "初始发布")
V1_0("v1.0", "127.0.0.1", "第一版"),
@TestEnumAnno(target = Map.class, des = "迭代版本")
V2_0("v2.0", "www.baidu.com", "第而版"),
V3_0("v3.0", "www.百川.com", "第三版"),
;
String sysVersion;
String sysAddr;
String sysName;
SystemVersionEnum(String sysVersion, String sysAddr, String sysName) {
this.sysVersion = sysVersion;
this.sysAddr = sysAddr;
this.sysName = sysName;
}
public SystemVersionEnum getByVersion(String version) {
SystemVersionEnum sve = null;
for(SystemVersionEnum en : SystemVersionEnum.values()) {
if(en.sysVersion.equals(version)) {
sve = en;
break;
}
}
return sve;
}
}
获取枚类上的注解
//Test.java
import com.test.annotation.TestEnumAnno;
import com.test.annotation.TestEnumClassAnno;
import com.test.menu.SystemVersionEnum;
import com.test.menu.TestEnum;
import java.lang.annotation.Annotation;
public class Test {
public static void main(String[] args) throws NoSuchFieldException {
getEnumClassAnnotations();
}
public static void getEnumClassAnnotations(){
Annotation [] as = SystemVersionEnum.class.getAnnotations();
for(Annotation a : as) {
if(a.annotationType() == TestEnumClassAnno.class) {
//处理业务
System.out.println("...处理业务");
}
System.out.println(a.annotationType());
}
}
}
获取枚举值的注解
public static void getEnumFieldAnnotaionts() throws NoSuchFieldException {
//获取指定枚举变量的注解
SystemVersionEnum sve = SystemVersionEnum.V1_0;
TestEnumAnno annotation = sve.getClass().getField(sve.name()).getAnnotation(TestEnumAnno.class);
System.out.println(annotation.target()+":"+annotation.des());
System.out.println("---------");
for(SystemVersionEnum te : SystemVersionEnum.values()) {
//知道类注解名称是
Annotation [] annotations = te.getClass().getField(te.name()).getAnnotations();
for(Annotation a : annotations) {
if(a.annotationType() == TestEnumAnno.class) {
TestEnumAnno tea = (TestEnumAnno) a;
System.out.println(tea.target()+":"+tea.des());
}
}
}
}
实例用到的注解
//TestEnumAnno .java
import java.lang.annotation.*;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface TestEnumAnno {
Class target();
String des();
}
//TestEnumClassAnno.java
import java.lang.annotation.*;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface TestEnumClassAnno {
Class target();
}