我有四个班级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方式很好地完成这项工作?
答案 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
我希望这有助于更好地理解这个概念/问题。