1

我有一个关于构建 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);**

我不知道如何解决它,请帮助!

4

6 回答 6

3

这取决于您想要达到的目标。一般来说,最好提供 API 并从外部使用它们。但是,在您的情况下,我认为您的“addCars”函数用于填充您的 ArrayList(您应该将其称为类似的名称)-这意味着将预定义的值添加到集合中。在这种情况下,请使用第一个。

因此,您的两种方法都是正确的(尽管您应该调用 firstpopulateCars和 second 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);
}
于 2013-10-06T12:46:16.860 回答
2

您提到的两种方式都是正确的,但是您应该修改方法 addCars() 以采用 Car 类型的参数。

例如,将方法签名更改为:

public void addCars(Car car){
     cars.add(car);
}

像这样通过一辆新车:

addCars(new Car("Toyota",1.0,1.0,2.0,2.0));
于 2013-10-06T12:51:05.407 回答
1

唯一的区别是,在第一种情况下,您在列表中有硬编码元素,而在第二种方法中,您动态添加它们。使用什么取决于您的需要。我想你稍后会使用 arraylist 从中获取元素,对它们做某事等等。然后你将在 arraylist 上使用 getter 方法,遍历它等等......这将适用于你选择的两种方法。

于 2013-10-06T12:52:37.910 回答
1

两个答案都是正确的。第一种方法使用传统的方法来创建对象。第二种方法有时称为工厂方法。当一个对象的构造在外部很复杂或剔除多个对象时,使用工厂方法很有用。

所以答案是:第一种方法对于构造相当简单和安全的对象是正确的。第二种(工厂)模式更适合复杂的对象。

于 2013-10-06T12:52:50.660 回答
0

@pei wang 好问题.. 第二个方法是 gud,因为你不是硬编码值.. 你应该向前一点.. 请在第二种方法中使用 DTO 设计模式使用 setter 和 getter

于 2013-10-06T13:07:20.657 回答
0

如果您传递除对象类型引用变量以外的任何引用变量,而不是那些向上转换为对象类型引用的引用变量,则 Add 方法需要 add 方法的对象类型引用。

于 2017-11-28T13:46:30.820 回答