您可以使用更好的面向對象方法來解決您的問題。
Store extends Items
這沒有意義。商店包含商品,因此您只需要一個像listOfItems
這樣的變量即可保存商店的所有商品。
你公共類商店是一個很好的候選人使用Singleton Pattern。
關於你的listOfItems
的構造:當一個List足夠時,你只需要使用一個List。另外,Java 7提供了對通用實例創建的類型推斷。
From The Java SE Documentation:可更換調用通用類的構造具有空組類型參數(<>),只要該編譯器可以從上下文推斷類型參數所需的類型的參數。這對尖括號非正式地稱爲鑽石。
所以,你應該用List<Item> listOfItems = new ArrayList<>()
,而不是ArrayList<Item> listOfItems = new ArrayList<Item>()
每次您使用掃描儀,你應該關閉的時間。
單例:
public class Store {
private static final Store INSTANCE = new Store();
private List<Item> listOfItems = new ArrayList<>();
private Store() {
// Private Constructor
// will prevent the instantiation of this class directly
}
public static Store getInstance() {
return INSTANCE;
}
public void addItems(List<Item> newlistOfItems) {
listOfItems.addAll(newlistOfItems);
}
public String printListOfItems() {
StringBuilder sb = new StringBuilder();
for (Item item : listOfItems) {
sb.append(" [NAME : " + item.getName() + ", PRICE : " + item.getPrice() + "]");
}
return sb.toString();
}
}
的POJO Item類
public class Item {
private String name;
private double price;
public Item(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
服務接口的項目管理:
public interface ItemManagerService {
List<Item> createListOfItems();
}
實施:
public class ItemManagerServiceImpl implements ItemManagerService {
@Override
public List<Item> createListOfItems() {
List<Item> newListOfItems = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
try {
do {
System.out.println("ENTER NAME");
String name = scanner.nextLine();
System.out.println("ENTER PRICE");
while (!scanner.hasNextDouble()) {
System.out.print("You must enter a valid number! Try again: ");
scanner.next();
}
double price = scanner.nextDouble();
Item item = new Item(name, price);
newListOfItems.add(item);
System.out.println("Continue?[Y/N]");
scanner.nextLine();
} while (scanner.nextLine().equalsIgnoreCase("y"));
} finally {
scanner.close();
}
return newListOfItems;
}
}
一個簡單的測試:
public class MainApp {
public static void main(String[] args) {
ItemManagerService itemManagerService = new ItemManagerServiceImpl();
List<Item> newlistOfItems = itemManagerService.createListOfItems();
Store.getInstance().addItems(newlistOfItems);
System.out.println(Store.getInstance().printListOfItems());
}
}
控制檯輸出:
ENTER NAME
table
ENTER PRICE
12
Continue?[Y/N]
y
ENTER NAME
car
ENTER PRICE
50,8
Continue?[Y/N]
n
[NAME : table, PRICE : 12.0] [NAME : car, PRICE : 50.8]
你想在外面申報清單嗎? –
您正在將您嘗試存儲的類擴展到Array列表中? ArrayList應該在Extended類之外聲明。 – ductiletoaster