java - ArrayList 允许我将项目存储到其中但不使用 .get() 调用它们,说它不是 ArrayList
问题描述
我正在编写一个程序来使用命令设计模式模拟餐厅菜单系统。我让我的菜单类中的构造函数初始化了一个数组列表。
import java.util.ArrayList;
public class Menu {
public ArrayList<MenuItem> listOfMenuItems;
public Menu() {
listOfMenuItems = new ArrayList<MenuItem>();
}
public void addItemToMenu(String itemName, String itemDescription, double cost) {
MenuItem newMenuItem = new MenuItem(itemName, itemDescription, cost);
listOfMenuItems.add(newMenuItem);
}
public void displayMenu() {
for(MenuItem item : listOfMenuItems) {
System.out.println("NAME: " + item.getItemName() + ", DESCRIPTION: " + item.getItemDescription()
+ ", COST: " + item.getItemCost());
}
}
}
在我的客户端中调用新菜单时,它允许我存储项目(就像它是一个数组列表一样),它还允许我实现命令设计模式并将我的所有项目打印出来。但是,我添加了一个 Tab 类,它使用来自我的 Menu 对象的信息,但它不允许我使用 .get() 从我的数组列表中检索信息。
import java.util.*;
public class testClient {
public static void main(String[] args) {
Menu menu = new Menu();
Tab tab;
System.out.println("MENU:");
menu.addItemToMenu("lobster", "#1234" , 25.99);
menu.addItemToMenu("chicken", "#5687" , 20.99);
menu.addItemToMenu("steak", "#4567" , 21.99);
DisplayMenu dispMenu = new DisplayMenu(menu);
SubmitButton onPressed = new SubmitButton(dispMenu);
onPressed.submit();
System.out.print("\n");
System.out.println("ORDERS:");
Order order = new Order();
order.addNewOrder("#1234");
order.addNewOrder("#5678");
SubmitOrder submitOrder = new SubmitOrder(order);
SubmitButton onSubmitPressed = new SubmitButton(submitOrder);
onSubmitPressed.submit();
tab.constructTab(newMenu.get(0).getItemName(), order.get(0).getOrderItemNumber(), newMenu.get(0).getItemCost());
}
}
tab.constructTab(....) 行返回以下错误:
testClient.java:31: error: cannot find symbol
tab.constructTab(menu.get(0).getItemName(), order.get(0).getOrderItemNumber(), menu.get(0).getItemCost());
^
symbol: method get(int)
location: variable menu of type Menu
testClient.java:31: error: cannot find symbol
tab.constructTab(menu.get(0).getItemName(), order.get(0).getOrderItemNumber(), menu.get(0).getItemCost());
^
symbol: method get(int)
location: variable order of type Order
testClient.java:31: error: cannot find symbol
tab.constructTab(menu.get(0).getItemName(), order.get(0).getOrderItemNumber(), menu.get(0).getItemCost());
^
symbol: method get(int)
location: variable menu of type Menu
3 errors
它说菜单应该是数组列表时是菜单类型?我不明白为什么它允许我添加项目。
如果您需要任何其他代码,请告诉我。
先感谢您!
解决方案
首先,您应该设置listOfMenuItems
为私有,因此您只能通过 getter 和 setter 访问它。这样您就可以阻止其他类直接访问该字段,因为您可能希望在为其分配任何值之前添加进一步的控件和/或条件。然后,您应该添加一个获取方法字段,listMenuItem
就像您使用addItemToMenu()
. 这段代码将如下所示:
import java.util.ArrayList;
public class Menu {
private ArrayList<MenuItem> listOfMenuItems;
public ArrayList<MenuItem> getListOfMenuItems(){
return this.listOfMenuItems;
}
}
要在你的主函数中调用它,你可以这样做,
public class testClient {
public static void main(String[] args) {
Menu menu = new Menu();
Tab tab;
tab.constructTab(menu.getListOfMenuItems().get(0).getItemName(), order.getListOfMenuItems().get(0).getOrderItemNumber(), menu.getListOfMenuItems().get(0).getItemCost());
}
}
请注意,返回类型getListOfMenuItems()
是 an ArrayList
,使您只能在调用 后使用其所有预定义函数getListOfMenuItems()
。
推荐阅读
- excel - 从不同的工作簿调用用户表单和使用范围
- combobox - Vaadin7 从 Rest API 动态填充组合框
- javascript - Leaflet & GeoJson:无法让 toolTip 工作
- r - 我的 R 代码中出现错误,提示“'train' 和 'class' 有不同的长度”?
- javascript - 在js/jquery中动态添加ID
- python - 如何将符号表达式转换为数值函数
- ios - 当所有文本字段在 SwiftUI 中都有值时,如何动态更新屏幕上的标签?
- charts - 向折线图添加区域
- python - 如何打开经过强化学习 OpenAI Gym 游戏训练的 pkl 文件
- livecode - 在实时代码中将文本输入字段的边框线更改为紫色的按钮脚本中编写的代码?