java - 如何通过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>>();
解决方案
创建电子/食品作为对象的子类/扩展。
推荐阅读
- jenkins-declarative-pipeline - 如何在 Jenkins 声明性管道的环境部分中操作字符串
- c# - “TestContext”不包含“DataRow”的定义
- angular - 如何避免 NGRX 或 NGXS 中的循环
- php - 如何通过ajax jquery上传多张图片
- javascript - 我可以在 JavaScript 中使用变量作为变量名吗?
- php - Laravel 5.6 更改时间戳
- javascript - Google 应用程序脚本正则表达式匹配第 n 次出现
- android - Cordova/Ionic Android:Push 和 GoogleMaps 插件之间的 Google Play 服务版本冲突
- android - 检查firebase数据库中是否存在字符串
- c# - 如何逃离异步任务