我试图将新的Object作为方法参数传递,并同时设置其变量。
这是一个不错的解决方案,但是又大又不好...
EventBox evtbox = new EventBox();
evtbox.setFloorColor(floorColor);
scriptUtils.runScript("sc-cfrmd",evtbox);
我需要这样的东西来缩短它
scriptUtils.runScript("sc-cfrmd",new EventBox().setFloorColor(floorColor));
当然,做到这一点的逻辑方法是在EventBox类中创建一个构造函数,但我需要找出不使用构造函数的方法。
感谢任何提示
答案 0 :(得分:1)
您可以通过添加所需的方法来使用方法链接。按照惯例,将设置者/获取者作为标准做法,只照其名字所说即可。
public EventBox withFloorColor(String floorColor) {
setFloorColor(floorColor);
return this;
}
scriptUtils.runScript("sc-cfrmd",new EventBox().withFloorColor(floorColor));
答案 1 :(得分:1)
您正在寻找fluent interface 通常,当您需要创建复杂的对象时,可以使用builder design pattern实现流畅的界面 例如:
import java.awt.Color;
public class EventBox {
private Color floorColor;
private EventBox() {
this.floorColor = null;
}
public Color getFloorColor() {
return floorColor;
}
private void setFloorColor(Color floorColor) {
this.floorColor = floorColor;
}
public static EventBoxBuilder builder() {
return new EventBoxBuilder();
}
public static class EventBoxBuilder {
private final EventBox box;
EventBoxBuilder() {
this.box = new EventBox();
}
public EventBoxBuilder setFloorColor(Color color) {
box.setFloorColor(color);
return this;
}
public EventBox build() {
return box;
}
}
}
....
scriptUtils.runScript("sc-cfrmd",EventBox.builder().setFloorColor(floorColor).build());
如果您能够使用Lombok Framwork,则可以通过在EventBox
类中添加@Builder批注,在编译时自动生成此类生成器
答案 2 :(得分:0)
最基本,最简单的解决方案当然是创建类似的方法
EventBox createFloorEventBox( String floorColor ) {
EventBox eb = new EventBox();
eb.setFloorColor( floorColor );
return eb;
}
并像使用它
scriptUtils.runScript("sc-cfrmd", createEventBox( floorColor ) );
除了构建器模式/方法链接/流利方法外,您还可以考虑在Java中使用lambda,例如
void runScript(String something, Consumer<EventBox> boxInitializer) {
EventBox eb = new EventBox();
initializer.apply(eb);
...
}
然后像这样称呼
runScript("something", eb -> eb.setFloorColor( floorColor ));