如何在Java中使用ArrayList

时间:2012-04-16 16:22:45

标签: java arrays arraylist

我有3个班级(汽车(超类), CarToRent CarToSell (扩展汽车)。

我正在创建一个界面(CarCompany)并希望在其中存储ArrayList类型的汽车。我该怎么做呢?请帮帮忙?

4 个答案:

答案 0 :(得分:3)

在界面中,您无法设置属性,因为默认情况下它们都具有最终修饰符,因此只需为您的界面声明getset方法。让实现者拥有该属性并覆盖这些方法。

public interface CarCompany {
    List<? extends Car> getCarList();
    void setCarList(List<? extends Car> carList);
}

更新:

首先,即使可以,也不应使用ArrayList,而是使用List接口,ArrayList实现该接口(有关此内容的更多信息:What does it mean to "program to an interface"?):

List<Car> carList = new ArrayList<Car>();

其次,如果你有一个超类,那么list属性不应该是超类,而是支持所有类生成的模板。让我们看一个这样的示例:您有一个DAO类,它以不同的方法返回List<CarToRent>List<CarToSell>。稍后,在商务课程中,您需要阅读List<Car>的所有元素,并使用汽车的price来获取某些公式。您是否会创建一种方法,将List<CarToRent>转换为List<Car>,将List<CarToSell>转换为List<Car>,如果您以后需要创建Car的新子项,该怎么办?对于WreckedCar,如CarWorkshop,您会创建第三个转换器吗?因此,您可以使用为您做“肮脏工作”的List<? extends Car>而不是所有的痛苦:

public void executeSomeFormula(List<? extends Car> carList) {
    //getting the actual VAT value (just for a sample);
    double actualVAT = getActualVATValue();
    //every object in the list extends Car, so it can be threatened as a Car instance
    for(Car car : carList) {
        car.setTotalPrice(car.getPrice() * (1 + actualVAT));
    }
}

答案 1 :(得分:1)

您应该创建一个ArrayList<CarCompany>,以便能够存储来自实现CarCompany接口的类的每种对象。

答案 2 :(得分:0)

import java.util.ArrayList;

ArrayList<TYPE> al = new ArrayList<TYPE>();
so if you need CarCompany
eg.
ArrayList<CarCompany> al = new ArrayList<CarCompany>();

另请参阅有关Class ArrayList

的此文档

答案 3 :(得分:0)

您的interface不应该拥有List辆汽车。它可以为List定义getter和设置方法,但不应定义它。实现界面的具体类应定义List

public class CarCompany{
    private List<Car> myList = new ArrayList<Car>();
}