我有一些看起来像这样的课程
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
对象),我认为统一处理应用程序中所有对象的最简单方法是让每个对象告诉我哪些字段可以得到来自他们。
在控制从对象中检索哪些字段时,我还可以考虑其他方法吗?
答案 0 :(得分: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
}
第一个解决方案不那么冗长,但注释中的名称必须与字段名称一起更新。第二个解决方案似乎更冗长,但字段名称不需要明确。