有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java泛化类的ArrayList之间的搜索方法

我有四个类Book Disk Paper Magazine,它们都是从另一个类Items派生的,它们都有一个String barcode字段

在另一个类foo中,我有ArrayList<Book> books; ArrayList<Disk> disks; ArrayList<Paper> papers; ArrayList<Magazine> magazines;,我想为其中每一个实现一个getByBarcode(String barcode)方法,该方法将在arraylist中查找带有该条形码的项。如果它是一本书,它必须查看图书清单等

我可以避免做四个不同的吗?我的意思是避免做一个getBookByBarcode(String barcode)必须在图书列表中查找的getDiskByBarcode(String barcode)必须在磁盘列表中查找的等等

并且有一个类似public Object getByBarcode(String barcode,type)的泛型。如何以面向对象的方式很好地实现这一点


共 (2) 个答案

  1. # 1 楼答案

    听起来可能有点黑客味,但你可以像其他用户建议的那样打电话给他们

    public Object getByBarcode(String barcode, Class<T> classy)
    {
       ArrayList<Items> items = null;
       if(classy.class.getSimpleName().equals(Book.class.getSimpleName()))
           items = bookArray;
       else if(classy.class.getSimpleName().equals(Magazine.class.getSimpleName()))
           items = magazineArray;
       else 
           ... cnt'd  
    
    
       for(Item i : items) 
           if( i.getBarCode().equals(barcode) return i;
    } 
    

    那么,把这称为畜生般的混乱,你可以做一些像

    Item i = getByBarCode("0932A3", Book.class);
    
  2. # 2 楼答案

    基本上每本书、杂志、磁盘和;纸是一种物品。因此,您应该有一个名为Item的父类,而不是它的复数形式。每个基类都应该分类为一个单一的实体

    然后,您应该创建书籍、杂志、磁盘等对象;纸张由于所有这些对象都分类为一个项,因此创建一个类型为Item的数组列表,并将这些对象添加到该列表中

    这样,您就有了一个项目列表,其中包含书籍、杂志、磁盘和;论文然后,您可以在此列表中查找带有条形码的项目,并获取项目的类型

    源代码:

    项目。java

    package myLibrary;
    
    public class Item {
    
        protected String barcode;
    
        public String getBarcode() {
            return barcode;
        }
    
        public void setBarcode(String barcode) {
            this.barcode = barcode;
        }
    
        public Item(String barcode) {
            this.barcode = barcode;
        }
    }
    

    这本书。java/Disk。java/杂志。java/Paper。java

    package myLibrary;
    
    public class Book extends Item {
    
        public Book(String barcode) {
            super(barcode);
        }
    
        public String getBarcode() {
            return barcode;
        }
    
    
    }
    

    讲师。java(包含主函数的类)

    package myCollege;
    
    import java.util.ArrayList;
    import myLibrary.Book;
    import myLibrary.Disk;
    import myLibrary.Item;
    import myLibrary.Magazine;
    import myLibrary.Paper;
    
    public class Lecturer {
    
        public static void main(String[] args) {
    
            // Declare items
            Book x1 = new Book("Item101");
            Book x2 = new Book("Item102");
            Disk x3 = new Disk("Item201");
            Disk x4 = new Disk("Item202");
            Magazine x5 = new Magazine("Item301");
            Paper x6 = new Paper("Item401");
            Paper x7 = new Paper("Item402");
    
            ArrayList<Item> items = new ArrayList<>();
            items.add(x1);
            items.add(x2);
            items.add(x3);
            items.add(x4);
            items.add(x5);
            items.add(x6);
            items.add(x7);
    
            String itemType = getItemByBarcode("Item202", items);
            System.out.println(itemType);
    
    
        }
    
        private static String getItemByBarcode(String barcode, ArrayList<Item> items) {
            String itemType = "";
            for(Item i : items) {
                if(i.getBarcode().equalsIgnoreCase(barcode)) {
                    itemType = i.getClass().getSimpleName();                
                }
            }
            return itemType;
        }
    
    }
    

    输出:

    Disk
    

    我希望这有助于更好地理解这个概念/问题