0
点赞
收藏
分享

微信扫一扫

通过反射获取注解和字段,并判断字段是否是对象


实体类

package com.tset.entity;
//生成所有参数的构造器
public class Person {
//班级名称
@A(classType = "班级名称", isObj = false, classPath = "")
private String className;
//班级分数
@A(classType = "班级分数")
private double classScore;
//小组名称
@A(classType = "小组名称")
private String groupName;
//小组分数
@A(classType = "小组分数")
private double groupScore;
//人物姓名
@A(classType = "人物姓名")
private String personName;
//人物总分
@A(classType = "人物总分")
private double personScore;
//学科名称
@A(classType = "学科名称")
private String subjectName;
public Person() {

}
public Person(String className, double classScore, String groupName, double groupScore, String personName, double personScore, String subjectName, double subjectScore) {
this.className = className;
this.classScore = classScore;
this.groupName = groupName;
this.groupScore = groupScore;
this.personName = personName;
this.personScore = personScore;
this.subjectName = subjectName;
this.subjectScore = subjectScore;
}

//学科分数
private double subjectScore;

public String getClassName() {
return className;
}

public void setClassName(String className) {
this.className = className;
}

public double getClassScore() {
return classScore;
}

public void setClassScore(double classScore) {
this.classScore = classScore;
}

public String getGroupName() {
return groupName;
}

public void setGroupName(String groupName) {
this.groupName = groupName;
}

public double getGroupScore() {
return groupScore;
}

public void setGroupScore(double groupScore) {
this.groupScore = groupScore;
}

public String getPersonName() {
return personName;
}

public void setPersonName(String personName) {
this.personName = personName;
}

public double getPersonScore() {
return personScore;
}

public void setPersonScore(double personScore) {
this.personScore = personScore;
}

public String getSubjectName() {
return subjectName;
}

public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}

public double getSubjectScore() {
return subjectScore;
}

public void setSubjectScore(double subjectScore) {
this.subjectScore = subjectScore;
}
}

注解

package com.tset.entity;


import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface A {

String classType();

boolean isObj() default false;

String classPath() default "";
}

执行方法

package com.tset.excel;

import com.tset.entity.A;
import com.tset.entity.Person;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class TEST {

public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException {
List<Person> list = new ArrayList<>();
Person person =new Person();
person.setClassName("java");
person.setPersonScore(1.1);
person.setClassScore(2.2);
person.setGroupName("fenz");

Field[] declaredFields = person.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
A annotation = declaredField.getAnnotation(A.class);
if (annotation != null && annotation.isObj()) {
String classPath = annotation.classPath();
declaredField.setAccessible(true);
Object val = declaredField.get(person);
Class<?> aClass = Class.forName(classPath);
if (aClass.isInstance(val)) {
// 处理流程
}
}
if (annotation != null) {
String key = annotation.classType();
declaredField.setAccessible(true);
Object val = declaredField.get(person);
System.out.println("key:"+key+", value:"+val);
}
}
}
}

举报

相关推荐

0 条评论