我有一种情况,我希望将属性更改列表映射到具有Java中许多字段的对象(后端)。
public class EditableObject {
private Object property;
public void setProperty(String value) {
property = value;
}
}
例如,我收到“that_property”,“new_value”,我想调用propObject.setProperty(“new_value”)。属性名称并不总是与方法名称完全匹配。
为了避免在我要映射所有名称和方法的地方进行巨大的切换,我想我会使用注释(同样,这是在Java 6中制作的,所以没有切换到String,导致巨大的if / then / else相反):
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EditableProperty
{
public String[] value();
}
public class EditableObject {
private Object property;
@EditablePropery(value="that_property")
public void setProperty(String value) {
property = value;
}
}
然后我构建并使用这样的地图:
methodEditMap = new HashMap<String, Method>();
Method[] methods = EditableObject.class.getMethods();
for (Method method : methods) {
EditableProperty annotEdit = method.getAnnotation(EditableProperty.class);
if (annotEdit != null) {
String[] props = annotEdit.value();
for (String prop : props)
methodEditMap.put(lProp, method);
}
}
我使用这样的地图来动态调用我想要应用属性更改时关联的方法。
这种方法可以让我避免巨大的转换,从疯狂的程序员的角度看起来更“优雅”,但我很想知道它。
简而言之,问题是要知道它是否是一个可接受的解决方案,如果不是,那么为什么以及什么会更好。