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 ));