您可以使用更好的面向对象方法来解决您的问题。
Store extends Items这没有意义。商店包含物品,因此您只需要像 listOfItems 这样的变量来保存商店的所有物品。
您的 public class Store 是使用 Singleton Pattern 的理想人选。
关于listOfItems的构造:当一个List就足够了,那么你应该只使用一个List。此外,java 7 为通用实例创建提供类型推断。
From The Java SE Documentation:只要编译器可以从上下文中推断类型参数,您就可以用一组空类型参数 () 替换调用泛型类的构造函数所需的类型参数。这对尖括号被非正式地称为菱形。
所以,你应该使用List<Item> listOfItems = new ArrayList<>() 而不是 ArrayList<Item> listOfItems = new ArrayList<Item>()
每次使用 Scanner 时都应该关闭它。
单身人士:
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 项目类
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]