对于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
也会生效)。
答案 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 Templates和 Getting 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 templates,Programmatically 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