как вызвать метод в классе только один раз, даже если объект для класса создан несколько раз - PullRequest
0 голосов
/ 16 января 2019

Я хочу установить ограничение по времени, используя метод:

setTimeLimit()

Но это setTimeLimit() присутствует внутри класса, и объект создается по мере того, как список повторяется, как показано ниже:

result.forEach(item -> {
    MyClass myClass = new MyClass();
    myClass.setSomething(item.myVariable);
});

setTimeLimit() вызывается внутри setSomething(), поскольку список повторяется столько раз, сколько вызывается setTimeLimit(), который я хочу вызвать только один раз за всю итерацию. Как мне достичь этого или подойти к этой проблеме?

Задача - установить ограничение времени URL для всех изображений.

Я попытался автоматически связать конструктор MyClass и вызвать setTimeLimit() в конструкторе, но я думаю, что setTimeLimit() вызывается, когда вводится зависимость, поэтому я не хочу, чтобы это устанавливалось во время DI.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Сеттер не должен заботиться о том, когда и сколько раз он вызывается извне. Если вы не хотите показывать setTimeLimit() вне класса и хотите, чтобы он вызывался только один раз за итерацию, тогда как насчет принятия списка «чего-то», а не одного «чего-то».

т.

public class MyClass {

    public void setSomethings(List<String> somethings) {
        setTimeLimit();
        somethings.forEach(this::setSomething);
    }

    private void setSomething(String something) {
        // ...
    }

    private void setTimeLimit() {
        // ...
    }
}

Таким образом, MyClass получает требуемый контроль, не нарушая функциональные отношения между MyClass и его потребителями.

0 голосов
/ 16 января 2019

Я думаю, вы должны попробовать что-то вроде этого:

private void setTimeLimit(Object timeLimit) {
  if (Objects.isNull(this.timeLimit)) {
    this.timeLimit = timeLimit;
  }
}

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

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