使用注释查找setter

时间:2015-04-28 10:00:09

标签: java annotations

我有一种情况,我希望将属性更改列表映射到具有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);
    }
} 

我使用这样的地图来动态调用我想要应用属性更改时关联的方法。

这种方法可以让我避免巨大的转换,从疯狂的程序员的角度看起来更“优雅”,但我很想知道它。

  • 首先,它看起来有点令人费解。
  • 其次,我担心与大型交换机相比,动态调用可能会出现性能问题
  • 第三,我认为它可以解除方法与实际使用的关系,它们的链接在IDE中是不可见的。
  • 最后,这个方法还有其他问题我不知道吗?

简而言之,问题是要知道它是否是一个可接受的解决方案,如果不是,那么为什么以及什么会更好。

0 个答案:

没有答案