我有3个班级(汽车(超类), CarToRent 和 CarToSell (扩展汽车)。
我正在创建一个界面(CarCompany)并希望在其中存储ArrayList
类型的汽车。我该怎么做呢?请帮帮忙?
答案 0 :(得分:3)
在界面中,您无法设置属性,因为默认情况下它们都具有最终修饰符,因此只需为您的界面声明get
和set
方法。让实现者拥有该属性并覆盖这些方法。
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>();
}