使用LinkedList Collection向对象添加实例变量

时间:2014-11-23 19:01:06

标签: java collections

我有一个汽车课:

public class Car {

    public String name = null; // Name of the Car Model
    public String color = null; // Color of the car

    Car(){
          /** DO WHATEVER***/
    }
}

然后在main()类中我这样做:

    LinkedList<Car> myCars = new  LinkedList<Car>();

    myCars.add(new Car());
    myCars.add(new Car());
    myCars.add(new Car());

    myCars.get(0).name = "Geep";
    myCars.get(0).color = "Black";

    myCars.get(1).name = "Camry";
    myCars.get(1).color = "Red";

    myCars.get(2).name = "Honda";
    myCars.get(2).color = "Green";

我的问题:

Lets assume that at the time of Car object creations, we do not have values of these instance variables and we get them at a later stage, so that constructor initialization is not feasible.

那么这是正确的方法吗?我的意思是如何在Java集合中为每个对象的实例变量赋值。我的意思是,使用get()方法?我明白,如果我们有很多车 然后我们将使用for循环。

请解释。

谢谢。

3 个答案:

答案 0 :(得分:4)

/** DO WHATEVER***/

更改构造函数会更有意义

类似于:

Car(String name, String color){
    this.name = name;
    this.color = color;
}

以及稍后插入列表:

myCars.add(new Car("Geep", "Black"));
myCars.add(new Car("Camry", "red"));
...

如果您没有汽车的“详细信息”,并且您只需要实例化包含50辆汽车的列表,稍后再添加“详细信息” - 另一个问题就是:细节来自哪里?如果你事先不知道它必须来自一个永恒的来源(用户输入,文件等),那么在列表中循环运行并添加细节是有意义的:

for (Car car : myCars) {
    String name = ... // get the details of the car from an external source
    String type = ... // get the details of the car from an external source
    car.setName(name); // of course you'll have to implement setName() and setType()
    car.setType(type); // which is a better practice than exposing the class members via public access
}

答案 1 :(得分:0)

关于这是否是正确的方法:我更喜欢覆盖构造函数,以便我的初始化和setter代码在同一个地方。

基本上,我会为Car提供构造函数:

public class Car {

public String name = null; // Name of the Car Model
public String color = null; // Color of the car

public Car(String name, String color){
  super();
  this.name = name;
  this.color = color;
  }
}

然后我会把它放在我的收藏中:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Ferrari", "Red"));

答案 2 :(得分:0)

首先,不建议公开实例变量(public)。将公开更改为私有并创建getter。此外,您可以创建一个在参数中使用名称和颜色的构造函数:

public class Car {

    private String name = null;
    private String color = null;

    public Car(String name, String color) {
        this.name = name;
        this.color = color;
    }

    public String getName() {
        return name;    
    }

    public String getColor() {
        return color;
    }
}

然后你可以这样做:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Camry", "Red"));
myCars.add(new Car("Honda", "Green"));

有很多方法可以做到,但我肯定会在将车辆信息添加到列表之前设置它。