Spring Boot 如何在类中只调用一次方法,即使类的对象被创建了无数次

ruarlubt  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(233)

我想用一个方法设置时间限制:

setTimeLimit()

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

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


setTimeLimit()setSomething()内部被调用,因为列表迭代了很多次setTimeLimit()被调用,我想在整个迭代过程中只调用一次。我如何才能实现这一点或解决这个问题?
任务是设置所有图像的URL时限。
我尝试自动加载MyClass的构造函数,并在构造函数中调用setTimeLimit(),但我认为setTimeLimit()是在注入依赖项时调用的,因此我不希望在DI期间设置此参数。

pu82cl6c

pu82cl6c1#

我觉得你应该试试这样的:

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

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

ql3eal8s

ql3eal8s2#

一个setter不应该关心它在外部被调用的时间和次数。如果你不想把setTimeLimit()暴露在类的外部,并且你只想在每次迭代中调用它一次,那么接受一个“something”的List而不是一个“something”怎么样?
ie.

public class MyClass {

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

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

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

字符串
这样,MyClass就拥有了它想要的控件,而不会破坏MyClass和它的使用者之间的功能关系。

相关问题