如何只使用一次方法调用重置所有对象值?

5 java

基本上,我想创建Counter对象,他们所要做的只是保持数字值.在我的resetCounters方法中,我想重置每个对象的值.这可能很容易,但我是个新手.

public class Counter
{
    Random number = new Random();

    Counter()
    {
        Random number = new Random();
    }

    public Random getNumber()
    {
        return number;
    }

    public void setNumber(Random number)
    {
        this.number = number;
    }

    public static void main(String[] args) 
    {
        Counter counter1 = new Counter();
        Counter counter2 = new Counter();
        Counter counter3 = new Counter();
        Counter counter4 = new Counter();
        Counter counter5 = new Counter();

    }

    public static void resetCounters()
    {

    }
    }
Run Code Online (Sandbox Code Playgroud)

krl*_*mlr 5

第一个选项:记住每个实例Counter.

收集Counter一些静态集合中的每个实例.要重置所有内容,只需遍历集合中的所有项目即可.但强引用对此来说太强大 - 确保它是弱引用的集合.

备注:

  1. 使用弱引用将避免Counter对象无限期存在的问题,因为它们是从静态集合中引用的.仅由弱引用引用的对象最终由垃圾收集器收集.
  2. 每个实例的集合都可以通过声明Counter构造函数private并仅允许通过static也将进行注册的成员函数构造来实现.(或者使用工厂模式的其他化身.)我相信工厂是这里的方式,因为物体的每个构造都必须执行副作用.但也许它会使Counter构造函数注册this静态集合.

第二种选择:发电计数器

保留static类型的生成计数器long,并在每个实例中保留此计数器的副本.重置所有计数器时,只需增加static生成计数器.getNumber()然后,该方法将static根据其自己的副本检查生成计数器,并在static生成计数器已更改时重置计数器.

(我真的不知道这个技巧的"官方"名称. 如何在O(1)中清零数组?)