【发布时间】:2020-05-20 18:51:42
【问题描述】:
我正在做一个分级作业,该软件包含多种产品类型,电子、书籍等,每个都有自己的数组列表,每个数组列表都存储在一个主数组列表中。我正在尝试使用 find 方法从其各自的数组列表中返回正确类型的对象,例如,如果用户输入是“食物”和“牛奶”,它知道搜索“食物”数组列表,然后比较字符串“ milk' 到 'food' 数组列表中每个对象的名称属性。
但是,由于软件返回的是对象对象而不是 foodproduct 对象,因此我很挣扎。
arraylists的arraylist创建如下:
public class ProductList {
private ArrayList<ArrayList>Products = new ArrayList<ArrayList>();
private String Filename;
public ProductList(){
Products.add(new ArrayList<ElectronicProduct>());
Products.add(new ArrayList<KitchenProduct>());
Products.add(new ArrayList<FoodProduct>());
Products.add(new ArrayList<BookProduct>());
Filename = "ProductList.txt";
}
使用以下 add 方法将产品添加到正确的数组列表中,它在参数中传递了超类产品对象,但是我尝试在添加到相应的数组之前将它们转换为所需的子类:
public void add(String category,Product src) throws IOException{
switch(category){
case "Electronic":
Products.get(0).add(src instanceof ElectronicProduct);
break;
case "Kitchen":
Products.get(1).add(src instanceof KitchenProduct);
break;
case "Food":
Products.get(2).add(src instanceof FoodProduct);
break;
case "Book":
Products.get(3).add(src instanceof BookProduct);
break;
}
}
为了检索对象,我使用以下方法,这就是问题变得明显的地方,尽管它可能是由较早的方法引起的。
它给出了错误'无法将对象转换为电子产品'。
public Product find(String categoryInput, String nameInput){
switch(categoryInput){
case "Electronic":
//this does not work
for(ElectronicProduct product : this.Products.get(0));
// code to compare the nameInput would be here
break;
case "Kitchen":
//same as above
break;
case "Food":
//same as above
break;
case "Book":
//same as above
break;
}
请有人帮我找出问题出在哪里,并建议如何解决它?
编辑
按照史蒂夫·韦克福德的建议,我改变了
private ArrayList<ArrayList>Products = new ArrayList<ArrayList>();
到
private ArrayList<ArrayList<Product>> Products = new ArrayList<ArrayList<Product>>();
【问题讨论】:
标签: java object arraylist return polymorphism