我想要我的二传手,这样我就可以链他们像:
myPojo.setX(x).setY(y);
通常我用Eclipse生成setter,但不幸的是,setter的code template允许我只修改setter的主体,而不修改签名。除了搜索和替换+手动编辑之外,完成上述操作最简单的方法是什么?:)
code template
gopyfrb31#
我可以提供一种补丁,但不需要任何额外的安装。转到“窗口”/“首选项”/“Java”/“代码样式”/“代码模板”。编辑“setter body”模板,如下所示:
${field} = ${param}; return this;
现在,当你运行“generate getters and setters”时,它将创建如下的setter:
public void setMyField(String myField) { this.myField = myField; return this; }
这显然会导致编译错误,因为方法类型是void。但您可以删除Ctrl-F,并将所有'public void set'替换为public YourClassName set。这是一个补丁,但它的工作...
void
Ctrl-F
public YourClassName set
new9mtju2#
您可以使用编辑器/模板来定义新模板。要定义新模板,请打开首选项窗口,然后选择Java-〉编辑器-〉模板。在此窗口中,您可以定义一个新模板并给予命名。例如:
public ${enclosing_type} setName(${argType} name) { this.name = name; return this; }
给予它一个名称,例如setr。然后您可以在java代码中使用此模板,方法是键入'setr',然后按Ctrl-空格键。
pgx2nnw83#
您也许可以使用fluent-builders-generator plugin以您想要的方式生成setter。
wyyhbhjk4#
记事本++解决方案:数据来源:
JavaType variableName;
搜索正则表达式:
(.*) (.*);
替换正则表达式
public JavaType with\2\(\1 p\2\) { this.\2 = p\2; return this; }
您必须手动更正方法名,因为它没有将变量名的第一个字母大写。
ccrfmcuu5#
我在此模板中使用withField命名模式
withField
public ${enclosing_type} with${Field}(${argType} ${param}) { set${Field}(${param}); return this; }
我认为它的灵感来自于@paweloque当时的answer,唯一的区别是增加了{$Field}和${param},它们用于命名方法和参数,并在方法体中调用eclipse生成的真实的的setter。模板的优点在于,在填充模板变量时,可以使用自动完成功能和几个制表符来创建with方法。结果是这样的:
public Foo withBar(String bar) { setBar(bar); return this; }
下面是在eclipse中进行设置的屏幕截图:
d5vmydt96#
我的两分钱就在这上面,我(小姐)用了
Preferences > Java > Code Style > Code Templates > Comments > Setter
并放入以下模板:
/** * @param ${param} the ${bare_field_name} to set */ // public ${enclosing_type} ${bare_field_name}(${field_type} ${param}) { // ${enclosing_method}(${param}); // return this; // }
优点:
Source > Generate Getters and Setters...
set<start-of-fieldname>
Ctrl
Space
缺点:
F
//
不幸的是,我找不到一种方法来大写字段名称的第一个字母,这将使使用前缀,如with可能。
with
2admgd597#
一种替代方法是使用Lombok's @Setter and @Getter。Lombok在编译时基于一些注解增强了类。它在命令行上运行良好,并且支持Eclipse。
@Getter @Setter public class Point { int x, y; static void test() { new Point().setX(1).setY(2); } }
在lombok.config中:
lombok.config
lombok.accessors.chain=true
kadbb4598#
在JavaForger中,你可以使用下面给出的模板来生成setter,这意味着你必须为每个类运行一个main方法来生成getter和setter。
<#list fields as field> /** * Sets the ${field.name} of the {@link ${class.name}}. * * @param ${field.name} The input {@link ${field.nonPrimitiveType}}. */ public ${class.name} ${field.setter}(${field.type} ${field.name}) { this.${field.name} = ${field.name}; return this; } </#list>
下面的代码为一个名为“www.example.com“的类执行上面的模板(setters.javat)myClass.java,并将生成的代码与inputclass合并。它将覆盖现有的setter(如果存在的话)。
JavaForgerConfiguration config = JavaForgerConfiguration.builder() .withTemplate("setters.javat") .withMergeClassProvider(ClassProvider.fromInputClass(s -> s)) .withOverride(true) .build(); JavaForger.execute(config, "myClass.java");
您必须使用以下命令添加“setters.javat”的位置:
StaticJavaForgerConfiguration.addTemplateLocation("my/location/");
该项目可以在这里找到:https://github.com/daanvdh/JavaForger。
8条答案
按热度按时间gopyfrb31#
我可以提供一种补丁,但不需要任何额外的安装。
转到“窗口”/“首选项”/“Java”/“代码样式”/“代码模板”。编辑“setter body”模板,如下所示:
现在,当你运行“generate getters and setters”时,它将创建如下的setter:
这显然会导致编译错误,因为方法类型是
void
。但您可以删除Ctrl-F
,并将所有'public void set'替换为public YourClassName set
。这是一个补丁,但它的工作...
new9mtju2#
您可以使用编辑器/模板来定义新模板。要定义新模板,请打开首选项窗口,然后选择Java-〉编辑器-〉模板。在此窗口中,您可以定义一个新模板并给予命名。例如:
给予它一个名称,例如setr。然后您可以在java代码中使用此模板,方法是键入'setr',然后按Ctrl-空格键。
pgx2nnw83#
您也许可以使用fluent-builders-generator plugin以您想要的方式生成setter。
wyyhbhjk4#
记事本++解决方案:
数据来源:
搜索正则表达式:
替换正则表达式
您必须手动更正方法名,因为它没有将变量名的第一个字母大写。
ccrfmcuu5#
我在此模板中使用
withField
命名模式我认为它的灵感来自于@paweloque当时的answer,唯一的区别是增加了{$Field}和${param},它们用于命名方法和参数,并在方法体中调用eclipse生成的真实的的setter。
模板的优点在于,在填充模板变量时,可以使用自动完成功能和几个制表符来创建with方法。
结果是这样的:
下面是在eclipse中进行设置的屏幕截图:
d5vmydt96#
我的两分钱就在这上面,我(小姐)用了
并放入以下模板:
优点:
set<start-of-fieldname>
并点击Ctrl
+Space
时,可以在生成单个setter时使用它。缺点:
Ctrl
+F
//
,并以空字串取代。不幸的是,我找不到一种方法来大写字段名称的第一个字母,这将使使用前缀,如
with
可能。2admgd597#
一种替代方法是使用Lombok's @Setter and @Getter。Lombok在编译时基于一些注解增强了类。它在命令行上运行良好,并且支持Eclipse。
在
lombok.config
中:kadbb4598#
在JavaForger中,你可以使用下面给出的模板来生成setter,这意味着你必须为每个类运行一个main方法来生成getter和setter。
下面的代码为一个名为“www.example.com“的类执行上面的模板(setters.javat)myClass.java,并将生成的代码与inputclass合并。它将覆盖现有的setter(如果存在的话)。
您必须使用以下命令添加“setters.javat”的位置:
该项目可以在这里找到:https://github.com/daanvdh/JavaForger。