Как запомнить только первое значение, переданное в метод объекта? - PullRequest
0 голосов
/ 23 октября 2019

Я создал простой класс:

class Compute{
    public Compute count(Function func){...}
}

Так что я могу вызывать этот метод в цепочке примерно так: compute.count(function).count(function).count(...), но я хотел бы запомнить только первую функцию, которую я прошел. Я сделал это, добавив в класс глобальное логическое значение:

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

, но также считаю, что это не очень хорошее решение. Есть ли лучший способ решить это?

Ответы [ 3 ]

2 голосов
/ 23 октября 2019

Вместо использования логического значения вы можете проверить, имеет ли func значение null, и назначить его, только если оно есть. Конечно, это работает, только если вы не инициализируете его где-то еще.

0 голосов
/ 23 октября 2019

Скороговорка строителя может помочь. Если вы определяете класс, такой как

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

, и, в конце концов, это конструктор, который вы можете использовать многократно, не переписывая его. Надеюсь, это поможет.

0 голосов
/ 23 октября 2019

В качестве альтернативы вы можете перегрузить 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() { ... }
}

и do

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

Эта последняя опция дает понять, что сохранение функции происходит только при создании объекта Compute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...