我有一些类是这样的
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
的实例中获取字段时,我只想允许其他人访问name
和age
。
由于我可能使用任意对象(例如: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
}
第一个解决方案不那么冗长,但是注释中的名称必须与字段名称一起更新。第二个解决方案似乎更冗长,但字段名不需要显式。