我有一种情况,我想把一个属性更改列表Map到一个对象(后端),在java中有很多字段。
public class EditableObject {
private Object property;
public void setProperty(String value) {
property = value;
}
}
例如,我收到“that\u property”、“new\u value”,我想调用propobject.setproperty(“new\u value”)。属性名并不总是与方法名完全匹配。
为了避免在Map所有名称和方法时进行巨大的切换,我想我应该使用注解(同样,这是在Java6中进行的,因此没有切换字符串,而是产生一个巨大的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;
}
}
然后我构建并使用这样一个Map:
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);
}
}
当我想应用属性更改时,我使用这样的Map来动态调用关联的方法。
这个方法让我避免了一个巨大的开关,从疯狂程序员的Angular 看,它看起来更“优雅”,但我很好奇。
首先,这似乎有点复杂。
其次,我担心与大型交换机相比,动态调用可能存在性能问题
第三,我发现它可以将方法与它们的实际使用分离,并且它们的链接在ide中是不可见的。
最后,这个方法还有其他我不知道的问题吗?
简言之,问题是要知道这是否是一个可接受的解决办法,如果不是,为什么和什么会更好。
暂无答案!
目前还没有任何答案,快来回答吧!