0

我有一些看起来像这样的课程

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对象),我想在应用程序中统一处理所有对象的最简单方法是让每个对象告诉我可以从它们获得哪些字段。

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

4

1 回答 1

1

您可以使用注释,例如

@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
}

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

于 2013-06-19T19:24:13.303 回答