java—使用注解查找setter

yqyhoc1h  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(184)

我有一种情况,我想把一个属性更改列表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中是不可见的。
最后,这个方法还有其他我不知道的问题吗?
简言之,问题是要知道这是否是一个可接受的解决办法,如果不是,为什么和什么会更好。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题