即使多次创建 class 的对象,如何只调用一次 class 中的方法

how to call a method in class just once even if the object for the class is created numerous times

我想使用以下方法设置时间限制:

setTimeLimit()

但是,这个 setTimeLimit() 存在于 class 中,并且对象是在列表迭代时创建的,如下所示:

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

setTimeLimit()setSomething() 内部被调用,因为列表迭代多次 setTimeLimit() 被调用,我想在整个迭代期间只调用一次。我怎样才能实现这个或解决这个问题?

任务是为所有图像设置 URL 时间限制。

我尝试自动装配 MyClass 的构造函数并在构造函数中调用 setTimeLimit(),但我认为 setTimeLimit() 是在注入依赖项时调用的,所以我不想要这个在 DI 期间设置。

我认为你应该尝试这样的事情:

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

但是,我建议您将 class 结构更改为第一次只初始化一次。

A setter 不应该关心它何时或多少次被外部调用。如果您不想在 class 之外公开 setTimeLimit(),并且您只希望每次迭代调用一次,那么接受 "something" 的列表而不是单个 "something".

public class MyClass {

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

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

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

这样 MyClass 就可以拥有它想要的控制权,而不会破坏 MyClass 与其消费者之间的功能关系。