调用firePropertyChange()的setter的Eclipse模板

时间:2012-01-17 10:10:42

标签: java eclipse eclipse-templates

对于MVC模型类,我的setter看起来像:

enum BoundProperty {FIELD_NAME, ...}

private Type fieldName;

public setFieldName(Type newValue) {
    Type oldValue = fieldName;
    fieldName = newValue;
    firePropertyChange(BoundProperty.FIELD_NAME, oldValue, newValue);
}

给定一个字段,可以从自动生成的setter生成此输出吗?如果没有,是否有办法从模板中获取此输出?

输出应该CamelCase字段名称以生成方法名称,因此fieldName生成setFieldName()和大写字段名称以生成属性枚举。

因此fieldName会生成FIELD_NAME(或FIELDNAME也会生效)。

2 个答案:

答案 0 :(得分:1)

我可以在“Generate getters / setters”对话框中看到此消息。 可以在“代码模板”首选项页面上配置getter / setter的格式。您可以到那里(Setter Body部分下的Code)并进行如下修改。

Type oldValue = ${field};
${field} = ${param};
firePropertyChange(BoundProperty.FIELD_NAME, oldValue, ${param});

但是它不会生成BoundProperty。需要更多的研究来确定它是否可能。这些链接可能会有所帮助

Useful Eclipse Java Code TemplatesGetting started with Eclipse code templates

答案 1 :(得分:1)

我认为没有一种简单的方法可以通过Eclipse模板实现这一点,主要是关于camelCase / upperCase和枚举值的生成。您可以查看这两个问题Is there a way to capitalize the first letter of a value of a variable in Eclipse (Helios) code templatesProgrammatically add code templates?以深入了解详情。

恕我直言,实现你想要的最好的方法是使用Fast Code Eclipse Plugin并为该插件编写一个速度模板,用于生成字段中的所有代码。

enum BoundProperty {
#foreach ($field in ${fields})
    ${field.toUpperCase()} #if( $foreach.hasNext ), #end
#end
}

#foreach ($field in ${fields})
    public ${field.type} get${field.name.substring(0,1).toUpperCase()}${field.name.substring(1)}(${field.type} newValue) {
        Type oldValue = fieldName;
        fieldName = newValue;
        firePropertyChange(BoundProperty.${field.name.toUpperCase()}, oldValue, newValue);       
    }
#end

或更改"getter_setter" template of that plugin