Java 在方法参数中使用setter传递新对象
我试图将新对象作为方法参数传递,同时设置它的变量 这是一个不错的解决方案,但规模大,不好Java 在方法参数中使用setter传递新对象,java,Java,我试图将新对象作为方法参数传递,同时设置它的变量 这是一个不错的解决方案,但规模大,不好 EventBox evtbox = new EventBox(); evtbox.setFloorColor(floorColor); scriptUtils.runScript("sc-cfrmd",evtbox); 我需要这样的东西把它缩短一点 scriptUtils.runScript("sc-cfrmd",new EventBox().setFloorColor(floorColor)); 当
EventBox evtbox = new EventBox();
evtbox.setFloorColor(floorColor);
scriptUtils.runScript("sc-cfrmd",evtbox);
我需要这样的东西把它缩短一点
scriptUtils.runScript("sc-cfrmd",new EventBox().setFloorColor(floorColor));
当然,这样做的逻辑方法只是在EventBox类中创建一个构造函数,但我需要找出不使用构造函数的方法
欢迎提供任何提示您可以通过根据需要添加方法来使用方法链接。按照惯例,让setter/getter作为标准实践,只是按照他们的名字去做
public EventBox withFloorColor(String floorColor) {
setFloorColor(floorColor);
return this;
}
scriptUtils.runScript("sc-cfrmd",new EventBox().withFloorColor(floorColor));
你在找什么
通常,当您需要创建一个复杂的对象时,您正在使用它实现fluent接口
例如:
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());
如果您能够使用,则可以在编译时通过向
EventBox
class添加注释自动生成这样的生成器。最基本、最简单的解决方案当然是创建一个类似
EventBox createFloorEventBox( String floorColor ) {
EventBox eb = new EventBox();
eb.setFloorColor( floorColor );
return eb;
}
像这样使用它
scriptUtils.runScript("sc-cfrmd", createEventBox( floorColor ) );
除了构建器模式/方法链/ FLUENT方法之外,还可以考虑在java中使用lambdas,例如
void runScript(String something, Consumer<EventBox> boxInitializer) {
EventBox eb = new EventBox();
initializer.apply(eb);
...
}
你可以在构建器中隐藏细节,这样你可以调用<代码> EngfBuxBuilder。StutoLooFror(FiloCuild).Build()/Cuff>,它将返回创建的具有值集的对象。C++是一个C++还是一个java?但它是针对Java@unusedVariable这在很大程度上取决于语言。在C#中,可以使用对象初始值设定项:
neweventbox{FloorColor=FloorColor}
。是的,我就是这么做的,现在它满足了我的需要。谢谢你的提示!:]
runScript("something", eb -> eb.setFloorColor( floorColor ));