首页 > 解决方案 > 如何通过arraylists /多态数组的arraylist进行搜索

问题描述

我正在做一个分级作业,该软件包含多种产品类型,电子、书籍等,每个都有自己的数组列表,每个数组列表都存储在一个主数组列表中。我正在尝试使用 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>>();

但是它现在在这里导致错误: 在此处输入图像描述

标签: javaobjectarraylistreturnpolymorphism

解决方案


创建电子/食品作为对象的子类/扩展。


推荐阅读