指定可以通过反射获得对象中的哪些字段



我有一些类是这样的

class Person {
  public String name;
  public String age;
  public String dateOfBirth;
  /* more fields */
  public String[] fieldsToReflect()
  {
     return new String[] { "name", "age"}
  }
}
class Vehicle {
  public String make;
  public String model;
  public String mileage;
  /* more fields */
  public String[] fieldsToReflect()
  {
    return new String[] { "make", "model" }
  }
}

Person对象有许多字段,但是当从Person的实例中获取字段时,我只想允许其他人访问nameage

由于我可能使用任意对象(例如:Vehicle对象),我认为统一处理应用程序中所有对象的最简单方法是让每个对象告诉我可以从中获得哪些字段。

当涉及到控制应该从对象检索哪些字段时,我可以考虑其他方法吗?

您可以使用注释,如

@ReflectableFields({"name", "age"})
class Person {
    public String name;
    public String age;
    public String dateOfBirth;
}

@ReflectableFields定义为

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ReflectableFields {
    String[] value();
}

或逐字段:

class Person {
    @Reflectable
    public String name;
    @Reflectable
    public String age;      
    public String dateOfBirth;
}

@Reflectable定义为

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Reflectable {
    // No field needed
}

第一个解决方案不那么冗长,但是注释中的名称必须与字段名称一起更新。第二个解决方案似乎更冗长,但字段名不需要显式。

相关内容

  • 没有找到相关文章

最新更新