我有一个名为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;
因此,如果它是一个静态变量,我可以检查天气是否为静态但是我如何检查天气是否为参考场?
任何人都可以解决我的疑虑吗?请我坚持到这里。
答案 0 :(得分:4)
您可以使用getType方法确定字段类型,然后仅使用必填字段。对于此特定情况,您可以检查归档是否为Date
或String
。
编辑:
使用注释+反射
第1步:定义自定义注释。这里DesiredField
是我们的自定义注释
@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface DesiredField {
}
第2步:使用DesiredField
为相应字段添加注释,您应该注释dateOfBirth
和aadhaarNumber
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
答案 1 :(得分:0)
看看Class.getDeclaredFields()
。此方法仅为您提供在给定类中声明的字段;继承的字段不会被返回。
此方法为您提供了一组Field
个对象。使用Field.getModifiers()
和Modifier
中的实用程序方法(例如,Modifier.isStatic(...)
),您可以找到字段是私有的,静态的,同步的等等。
答案 2 :(得分:0)
您可以传递字段名称以仅获取该字段:
Field f1 = BaseModel.class.getDeclaredField("dateOfBirth");
Field f2 = BaseModel.class.getDeclaredField("aadhaarNumber");
检索Modifier
以进一步检查:
Modifier.isStatic(f1.getModifiers());
Modifier.isPrivate(f1.getModifiers());
等
答案 3 :(得分: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())