Java 使用LinkedList集合向对象添加实例变量
我有一个汽车级别:Java 使用LinkedList集合向对象添加实例变量,java,collections,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 L
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";
那么这是上面的正确方法吗?我的意思是,在Java集合中,如何为每个对象的实例变量赋值?我明白,如果我们有很多车对象,然后我们将使用for循环 请解释一下
谢谢。将构造函数更改为:
/**做任何事***/
例如:
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
}
将构造函数更改为:
/**做任何事***/
例如:
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
}
关于这是否是正确的方法:我更喜欢重写构造函数,以便我的初始化代码和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"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“法拉利”、“红色”);
关于这是否是正确的方法:我更喜欢重写构造函数,以便我的初始化代码和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"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“法拉利”、“红色”);
首先,不建议公开实例变量(public)。将public更改为private并创建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"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“凯美瑞”、“红色”);
添加(新车(“本田”、“绿色”));
有很多方法可以做到这一点,但我肯定会在将汽车信息添加到列表之前设置汽车信息。首先,不建议公开实例变量(public)。将public更改为private并创建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"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“凯美瑞”、“红色”);
添加(新车(“本田”、“绿色”));
有很多方法可以做到这一点,但我肯定会在将汽车信息添加到列表之前设置汽车信息。在这种情况下,正确的方法是在的构造函数中初始化这些值Car@Navchetan:请你重新措辞/详细解释一下你的意思:“我的意思是,在Java集合中,如何为每个对象的实例变量赋值。我的意思是,使用get()方法?我明白,如果我们有很多car对象,那么我们将使用for循环。“是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确和最佳的方法:myCars.get(0)。name=“Geep"; 在这种情况下,正确的方法是在Car@Navchetan:您能否重新表述/详细说明您的意思:“我是说如何在Java集合中为每个对象的实例变量赋值方法?我明白,如果我们有很多汽车物体,那么我们将使用for循环。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”@Navchetan-seeaddition@alfasin +1. 如果您有太多的实例变量,我还建议使用构建器模式,这样可以使代码可重用、可读并且更易于维护IMHO。下面是一个示例,其中包含一些详细信息。@dubes生成器模式不适合此场景,因为在实例化时对象的详细信息是未知的。这里的模式是创建“空白”模板汽车对象,并在稍后“填充”详细信息。在生成器模式中,收集所有参数,然后才实例化对象。@alfasin+1。谢谢,是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”@Navchetan-seeaddition@alfasin +1. 如果您有太多的实例变量,使代码可重用、可读性和可扩展性,我还建议使用构建器模式