调用firePropertyChange()的setter的Eclipse模板

Ric*_*ish 5 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

所以fieldName生成FIELD_NAME(或者FIELDNAME也会起作用).

jal*_*aba 1

我认为没有一种直接的方法可以通过 Eclipse 模板来实现这一点,主要涉及camelCase/upperCase 和枚举值的生成。您可以检查这两个问题有没有办法在 Eclipse (Helios) 代码模板中将变量值的首字母大写以编程方式添加代码模板?深入了解更多细节。

恕我直言,实现您想要的效果的最佳方法是使用Fast Code Eclipse 插件并为该插件编写一个速度模板,该模板可从字段生成所有代码。

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
Run Code Online (Sandbox Code Playgroud)

或者更改该插件的“getter_setter”模板