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