如何记住仅传递给对象方法的第一个值?

时间:2019-10-23 15:55:52

标签: java java-8

我创建了一个简单的类:

<Tabs>
   <Tab title="1" />
   <Tab title="2" />
   <Tab title="3" />
   <button onClick={addTab}>Test</button>
</Tabs>

因此,我可以像这样的链中调用此方法:class Compute{ public Compute count(Function func){...} } ,但是我只想记住我已经传递的第一个函数。我通过在类中添加一个全局布尔值来做到这一点:

compute.count(function).count(function).count(...)

但是我也认为这不是一个好的解决方案。有没有更好的解决方法?

3 个答案:

答案 0 :(得分:2)

您可以检查func是否为null并仅在为true时分配它,而不是使用布尔值。当然,仅当您不在其他地方初始化它时,它才起作用。

答案 1 :(得分:0)

或者,您可以重载count()

class Compute{
    private boolean first;
    private Function func;
    public Compute count(Function func) { ...}
    public Compute count() { ... }
}

现在您可以做

compount.count(function).count().count().count();

或者您可以将Function对象传递给构造函数:

class Compute{
    private boolean first;
    private Function func;
    public Compute(Function func) { this.func = func}
    public Compute count() { ... }
}

然后做

Compute comput = new Compute(function)
compute.count().count().count();

最后一个选项清楚地表明,仅在创建Compute对象时才存储函数。

答案 2 :(得分:0)

建设者的模式可能会有所帮助。如果您定义类似

的类
class Compute {
      private final Function function;
      public Compute(Function function) {
           this.function = function;
      }
      public Compute count(){
         // your code
      }
}

然后您可以创建一个类似

的构建器
public class ComputeBuilder {
    private final Computation computation;

    public ComputeBuilder addFunction(Function function) {
        computations.add(new Computation(function))
    }

    public ComputeBuilder addComputation(Computation computation) {
        computations.add(computation)
    }

    public Computation build(int iteration) {
        Computation result;
        for (int index = 0 ; index < iteration; index++ ) {
            if (index > 0) {
                result = result.count();
            }
            result = computation.count();
        }
        return result;
    }
}

最后是一个构建器,您可以多次重用而无需重写它。 希望对您有所帮助。