1

我有一个名为的类Person.java,它有自己的变量,还指向一些引用的类。看看下面的变量

public class Person extends BaseModel {
private static final long serialVersionUID = 1L;

private Date dateOfBirth;
private String aadhaarNumber;

private Set<EducationQualification> educationQualifications;
private Set<EmploymentExperience> employmentExperiences;
private ContactInformation contactInformation;
private DriversLicense driversLicense;
private PersonName personName;
private Candidate candidate;
private Passport passport;
private Set<Award> awards;
}

在这里,我使用 Java 反射获取字段名称。当我使用Class.getDeclaredField()它给出所有字段(指定变量以上)时。但我只想要两个领域

private Date dateOfBirth;
private String aadhaarNumber;

因此,如果它是一个静态变量,我可以检查天气是否为静态变量,但我如何检查天气是否为引用字段?

谁能解决我的疑惑?请我卡在这里。

4

4 回答 4

4

您可以使用getType方法来确定字段的类型,然后只使用必填字段。对于这种特殊情况,您可以检查提交的 if typeDateString.


编辑 :

使用注解 + 反射

第 1 步:定义您的自定义注释。这DesiredField是我们的自定义注释

@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface DesiredField {

}   

第 2 步:用 注释适当的字段DesiredField,您应该注释dateOfBirthaadhaarNumber喜欢

public class Person extends BaseModel {

    @DesiredField
    private Date dateOfBirth;
    @DesiredField
    private String aadhaarNumber;

    private Set<EducationQualification> educationQualifications;

    // Rest of the fields and methods

}

第 3 步:使用反射查找带注释的字段

  Person person = new Person();
  Field[] fields = person.getClass().getFields();

  for(Field field : fields){
      DesiredField annotation = field.getAnnotation(DesiredField.class);
      if( annotation != null ){
          // This is desired field now do what you want
      }
  } 

这可能会有所帮助:http ://www.vogella.com/articles/JavaAnnotations/article.html

于 2013-07-17T06:18:30.013 回答
0

看看Class.getDeclaredFields()。此方法将只为您提供在给定类中声明的字段;不返回继承的字段。

此方法为您提供了一个对象数组Field。使用和(例如)Field.getModifiers()中的实用方法,您可以查看字段是否为私有、静态、同步等。ModifierModifier.isStatic(...)

于 2013-07-17T06:23:27.253 回答
0

获得选定字段的反射

Field[] declaredFields = clas.getDeclaredFields();
    List requiredFileds =  Arrays.asList("dateOfBirth","aadhaarNumber");
    for(Field f:declaredFields) {
        if(requiredFileds.contains(f.getName())) {

        }
    }

检查静态字段

java.lang.reflect.Modifier.isStatic(field.getModifiers())
于 2013-07-17T06:30:50.910 回答
0

您可以传递字段名称以仅获取该字段:

 Field f1 = BaseModel.class.getDeclaredField("dateOfBirth");
 Field f2 = BaseModel.class.getDeclaredField("aadhaarNumber");

检索以Modifier供进一步检查:

 Modifier.isStatic(f1.getModifiers());
 Modifier.isPrivate(f1.getModifiers());

等等

于 2013-07-17T06:25:50.420 回答