我有四个类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方式很好地做到这一点?
最佳答案
基本上,每本书,杂志,磁盘和纸张都是一个项目。因此,您应该有一个名为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
我希望这有助于更好地理解概念/问题。
关于java - 泛化类的ArrayList之间的搜索方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27073183/