【问题标题】:Adding the value of a variable to the name of an object during the creation of the object在创建对象期间将变量的值添加到对象的名称中
【发布时间】:2012-10-21 19:02:08
【问题描述】:

我正在创建 Car 对象,并且我正在计算使用变量“carCounter”创建的汽车数量。 CarCounter 从 0 开始,我想将 Car 对象命名为 car(carCounter) 并在每次创建汽车时增加计数器,以便将汽车命名为 car0、car1、car2 等...对象的创建?

类似 Car() car(+carCounter+) = new Car(); ?

【问题讨论】:

  • 你的Car是什么样的?

标签: java


【解决方案1】:

我想你想要的是Array:

Car[] cars = new Car[3];
cars[0] = new Car();
cars[1] = new Car();
cars[2] = new Car();

这还可以让您通过变量引用索引(您所称的计数):

int n = 1;
Car carAtIndexN = cars[n];

如果你要初始化一整套汽车,最好在循环中这样做:

int totalCarCount = 10;

Car[] cars = new Car[totalCarCount];

for (int i=0; i<totalCarCount; i++) {
  cars[i] = new Car();
}

【讨论】:

    【解决方案2】:

    您可以维护一个static counter 变量,每次创建class 的实例时,递增该变量并为该实例设置它。

    public class YourClass {
        private static counter = 0;
        private String name;
    
        public YourClass() {
            name = "car" + counter;
            counter++;
        }
    }
    

    【讨论】:

    • 哇,呃。很简单。我不知道为什么我没有想到它.. 谢谢!就一个问题。我将如何实例化类的对象?只需输入“新车”?
    • @user939287。有些事情你突然就知道了。所以应该不足为奇。通常,您仅在需要时才学习它们。 :)
    【解决方案3】:

    为了维护线程安全,我建议对任务使用static AtomicLong 变量,该变量将作为构造函数中的最后一个命令递增。这样一来,如果构造函数中有Exception,计数器就会完好无损。

    public final class Car {
        private static AtomicLong carCounter = new AtomicLong();
        public Car() {
            //do the dirty things here
            carCounter.incrementAndGet();
        }  
        public static long getCounterValue() {
            return carCounter.get();
        }
    }
    

    我也会创建类final,因为如果一个类扩展了这个类,它的构造函数可以在保存计数器后执行操作,这会使事情处于不一致的状态(计数器不会反映数字创建的实例)...

    有这么多限制,这不是一个非常有用的情况,不是吗?我认为最好的解决方案是使用abstract factory 创建实例并跟踪计数器。也许那个抽象工厂甚至应该是Singleton...

    【讨论】:

      【解决方案4】:
       public Class Car {
          public static int counter= 0;
          String name="";
          public Car() {
             counter++;
             name= "car"+ counter;
          };
      }
      

      这就是 Car 类的全部内容。

      【讨论】:

        猜你喜欢
        • 2011-05-03
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多