自定义注解使用

使用自定义注解将一个实体属性有序分成两组

自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
	
	public enum Obj{A, B};
	
	public Obj obj();
	
	public int index() default Integer.MAX_VALUE;

}

 实体的使用注解

public class Person {
	private String username;//姓名
	private int sex;//性别
	private int age;//年龄
	private String cardNo;//证件号
	
	private String job;
	private Double salary;
	private String Address;
	
	@AnnotationTest(obj = Obj.A, index = 1)
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@AnnotationTest(obj = Obj.A, index = 2)
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	@AnnotationTest(obj = Obj.A, index = 3)
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@AnnotationTest(obj = Obj.A, index = 4)
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	@AnnotationTest(obj = Obj.B, index = 1)
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	@AnnotationTest(obj = Obj.B, index = 2)
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	@AnnotationTest(obj = Obj.B, index = 3)
	public String getAddress() {
		return Address;
	}
	public void setAddress(String address) {
		Address = address;
	}
	
}

 比较器排序

public class MethodComparator implements Comparator<Method> {

	@Override
	public int compare(Method o1, Method o2) {
		AnnotationTest at1 = o1.getAnnotation(AnnotationTest.class);
		AnnotationTest at2 = o1.getAnnotation(AnnotationTest.class);
		if(at1.index() < at2.index()) {
			return 1;
		} else if(at1.index() > at2.index()) {
			return -1;
		} else {
			return 0;
		}
	}

}

 测试

public class Test {
	
	public static void main(String[] args) {
		testAnnotation();
	}

	public static void testAnnotation() {
		Person p = new Person();
		p.setUsername("share");
		p.setAge(25);
		p.setSex(1);
		p.setCardNo("123456");
		p.setJob("intenet");
		p.setSalary(12345.0);
		p.setAddress("shanghai");
		
		List<Method> methodA = getMethod(p, Obj.A);
		List<Method> methodB = getMethod(p, Obj.B);
		
		for (Method method : methodA) {
			if(method.getName().startsWith("get")) {
				try {
					System.out.println(method.invoke(p));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("===========================");
		for (Method method : methodB) {
			if(method.getName().startsWith("get")) {
				try {
					System.out.println(method.invoke(p));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	} 
	
	/**
	 * 对象分类存储
	 * 2015年10月25日 caifan
	 * @param p
	 * @param obj
	 * @return
	 */
	public static List<Method> getMethod(Person p, Obj obj) {
		Method[] methods = p.getClass().getDeclaredMethods();
		List<Method> methodList = new ArrayList<Method>();
		for (Method method : methods) {
			AnnotationTest at = method.getAnnotation(AnnotationTest.class);
			if(method.isAnnotationPresent(AnnotationTest.class) && method.getName().startsWith("get")){
				if(at.obj() == obj){
					methodList.add(method);
				}
			}
		}
		MethodComparator mc = new MethodComparator();
		Collections.sort(methodList, mc);
		return methodList;
	}
}

 输出结果:(结果根据注解中的Obj 和 index 分成了两类)

share

1

25

123456

===========================

shanghai

intenet

12345.0

猜你喜欢

转载自shareisattitude.iteye.com/blog/2252581