Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何搜索arraylist/多态数组的arraylist_Java_Object_Arraylist_Return_Polymorphism - Fatal编程技术网

Java 如何搜索arraylist/多态数组的arraylist

Java 如何搜索arraylist/多态数组的arraylist,java,object,arraylist,return,polymorphism,Java,Object,Arraylist,Return,Polymorphism,我正在进行分级作业,该软件包含多种产品类型,电子产品、书籍等,每种产品都有自己的arraylist,每个arraylist存储在主数组列表中。我试图使用find方法从其各自的arraylist返回正确类型的对象,例如,如果用户输入为“food”和“milk”,它知道搜索“food”arraylist,然后将字符串“milk”与“food”arraylist中每个对象的name属性进行比较 然而,由于软件返回的是一个对象而不是一个foodproduct对象,所以我很挣扎 arraylist的arr

我正在进行分级作业,该软件包含多种产品类型,电子产品、书籍等,每种产品都有自己的arraylist,每个arraylist存储在主数组列表中。我试图使用find方法从其各自的arraylist返回正确类型的对象,例如,如果用户输入为“food”和“milk”,它知道搜索“food”arraylist,然后将字符串“milk”与“food”arraylist中每个对象的name属性进行比较

然而,由于软件返回的是一个对象而不是一个foodproduct对象,所以我很挣扎

arraylist的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";
} 
为了检索对象,我使用了以下方法,这就是问题变得明显的地方,尽管它可能是由以前的方法引起的

它给出错误“对象无法转换为电子产品”

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>();

私有数组列表

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

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

对于ProductList,请尝试:

public class ProductList {
    private ArrayList<ArrayList<? extends Product>> Products = new 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";
    }
} 
要查看列表,请尝试:

public class ProductList {
    private ArrayList<ArrayList<? extends Product>> Products = new 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";
    }
} 

electronic/food类是product类的扩展。electronic/food类是product类的扩展。非常感谢您在这方面的帮助,我没有意识到instanceof是一个布尔值!我使用了您最初的建议,但是在初始化子数组时出现了错误,错误在编辑中,您知道原因吗?ElectronicProduct是否扩展了产品?是的,看到的所有类ElectronicProduct、FoodProduct、BookProduct、all Extend Product。。我确实试过写产品;但这不起作用。Products.add(new ArrayList这是我尝试过的,但我得到的信息是,它在语法上不正确,你知道必须修改什么吗?非常感谢你在这方面的帮助,非常感谢。非常感谢你在这方面的帮助,我没有意识到instanceof是布尔值!我使用了你最初的建议,但它是givi初始化子数组时出错,错误在编辑中,您知道原因吗?ElectronicProduct是否扩展了产品?是的,看到的所有类ElectronicProduct、FoodProduct、BookProduct、all Extend Product..我确实尝试过编写Products.add(new ArrayList());但这不起作用。Products.add(new ArrayList这是我尝试过的,但我得到的信息是,它在语法上不正确,您知道必须修改什么吗?非常感谢您的帮助,非常感谢。
public class ProductList {
    private ArrayList<ArrayList<? extends Product>> Products = new 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";
    }
} 
for (Product product : this.Products.get(0)) {
    // (ElectronicProduct)product
}