在类的ArrayLists之间推广搜索方法

时间:2014-11-22 01:50:58

标签: java

我有四个班级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)这样的通用名称。我如何以OOP方式很好地完成这项工作?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

基本上每本书,杂志,磁盘和放大器纸是一个项目。因此,您应该有一个名为Item的父类,而不是的复数形式。每个基类应归类为单一实体。

然后你应该创建Book,Magazine,Disk&amp;的对象。纸。由于所有这些都归类为Item,因此请创建一个类型为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;
    }
}

Book.java / Disk.java / Magazine.java / Paper.java

package myLibrary;

public class Book extends Item {

    public Book(String barcode) {
        super(barcode);
    }

    public String getBarcode() {
        return barcode;
    }


}

Lecturer.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

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