我有一个关于构建ArrayList的问题,我有一个Car Class,现在我需要创建一个ArrayList来放入内容,我把它命名为Race,请看下面的代码:
import java.util.ArrayList;
public class Race {
private ArrayList<Car>cars;
public Race(){
cars=new ArrayList<Car>();
}
现在我需要一个向ArrayList添加内容的方法,有两种方法可以编写我感到困惑的方法:
第一个
public void addCars(){
Car Toyota=new Car("Toyota",1.0,1.0,2.0,2.0);
Car Honda=new Car("Honda",1.0,2.0,1.0,2.0);
Car Mazda=new Car("Mazda",1.0,3.0,2.0,3.0);
Car Suzuki=new Car("Suzuki",1.0,4.0,4.0,2.0);
cars.add(Toyota);
cars.add(Honda);
cars.add(Mazda);
cars.add(Suzuki);
}
第二个
public void addCars(Object nm,String n, double s, double p, double a, double b){
Car name=new Car(n,s,p,a,b);
cars.add(name);
}
编码时两种方式都没有错误报道,但我不确定哪一种是正确的,或者两种方法都不正确,请帮助,欢呼!
更新
public void addCars(Car car){
cars.add(car);
}
这是我最后使用的,然后我创建了一个名为Test的新类,使用main方法单独添加汽车,但最后一行有错误:
public class Test {
public static void main(String[] args) {
Car Toyota=new Car("Toyota",1.0,1.0,2.0,2.0);
**cars.addCars(Toyota);**
我不知道如何修复它,请帮助!
答案 0 :(得分:3)
这取决于你想要达到的目标。通常,最好提供API并从外部使用它们。但是,在你的情况下,我认为你的&#34; addCars&#34;函数用于填充您的ArrayList(您应该将其称为类似) - 这意味着将预定义值添加到Collection。 在这种情况下,请使用第一个。
所以,你的两个方法都是正确的(尽管你应该调用第一个populateCars
和第二个addCar
)并且应该可以使用,但是你需要根据你的情况使用它们。
此外,如果您想提供用于添加Cars的API,请让用户自己获取Car对象,而不是在add方法中构建一个。 (您可能希望在添加之前更改它,您永远不知道)
所以我建议使用其中一种方法,但将第一种方法更改为:
public void populateCars(){
Car Toyota=new Car("Toyota",1.0,1.0,2.0,2.0);
Car Honda=new Car("Honda",1.0,2.0,1.0,2.0);
Car Mazda=new Car("Mazda",1.0,3.0,2.0,3.0);
Car Suzuki=new Car("Suzuki",1.0,4.0,4.0,2.0);
cars.add(Toyota);
cars.add(Honda);
cars.add(Mazda);
cars.add(Suzuki);
}
或第二个:
public void addCar(Car car){
cars.add(car);
}
答案 1 :(得分:2)
您提到的两种方式都是正确的,但您应该修改方法addCars()以获取Car类型的参数。
例如,将方法签名更改为:
public void addCars(Car car){
cars.add(car);
}
只需通过这样的新车:
addCars(new Car("Toyota",1.0,1.0,2.0,2.0));
答案 2 :(得分:1)
唯一的区别是,在第一种情况下,您在列表中有硬编码元素,在第二种方法中,您可以动态添加它们。使用方法取决于您的需要。 我想你以后会使用arraylist来获取它的元素,用它们做等等。然后你将在arraylist上使用getter方法,迭代它等等......这将适用于你选择的两种方法。 / p>
答案 3 :(得分:1)
两个答案都是正确的。第一种方法使用传统方法来创建对象。第二种方法有时称为Factory方法。当对象的构造外部复杂或冲压出多个对象时,使用工厂方法很有用。
所以答案是:第一种方法对于构造相当简单和安全的对象是正确的。第二种(工厂)模式对于复杂对象更好。
答案 4 :(得分:0)
@pei wang好问题。第二种方法很好,因为你不是很难编码的价值..你应该向前走一点..请在第二种方法中使用DTO设计模式使用setter和getters
答案 5 :(得分:0)
如果传递除对象类型引用变量之外的任何引用变量而不是那些上传到对象类型引用的引用变量,则add方法需要add方法的对象类型引用。