是否有一个更有效的方法返回布尔值从一个方法与多个对象?



请原谅我对这个问题的措辞,我对Java还是相当陌生的,所以我不确定如何表达它。基本上,我已经创建了一个库存,并添加了2种不同的方法:

public class Inventory 
{   
String name;
Items myItems = new Items();
boolean addFoodItem;
boolean addDrinkItem;
boolean addToyItem;
boolean addCampingItem;
boolean removeFoodItem;
boolean removeDrinkItem;
boolean removeToyItem;
boolean removeCampingItem;

ArrayList<Objects> inventory = new ArrayList<Objects>();
Objects myObjects = new Objects(name);

public boolean AddToInventory (boolean addFoodItem, boolean addDrinkItem, boolean addToyItem, boolean addCampingItem)
{
if (addFoodItem)
{
inventory.add(myItems.foodItem);
System.out.println("You have added 1 " + myItems.FoodItem.name + " to your 
inventory.");
}
if (addDrinkItem)
{
inventory.add(myItems.drinkItem);
System.out.println("You have added 1 " + myItems.DrinkItem.name + " to your 
inventory.");
}
if (addToyItem)
{
inventory.add(myItems.toyItem);
System.out.println("You have added 1 " + myItems.ToyItem.name + " to your 
inventory.");
}
if (addCampingItem)
{
inventory.add(myItems.campingItem);
System.out.println("You have added 1 " + myItems.CampingItem.name + " to your 
inventory.");
}
return true;
}
public boolean RemoveFromInventory(boolean removeFoodItem, boolean removeDrinkItem, boolean 
removeToyItem, boolean removeCampingItem)
{           
if (removeFoodItem)
{
inventory.remove(myItems.foodItem);
System.out.println("You have used 1 " + myItems.foodItem.name + " from your 
inventory.");
}
if (removeDrinkItem)
{
inventory.remove(myItems.drinkItem);
System.out.println("You have used 1 " + myItems.drinkItem.name + " from your 
inventory.");
}
if (removeToyItem)
{
inventory.remove(myItems.toyItem);
System.out.println("You have used 1 " + myItems.toyItem.name + " from your 
inventory.");
}
if (removeCampingItem)
{
inventory.remove(myItems.campingItem);
System.out.println("You have used 1 " + myItems.campingItem.name + " from your 
inventory.");
}
return true;
}       

public void GetInventory()
{
for (Objects items : inventory)
{
System.out.println(items.name);
}    
}

将有更多的对象,将被添加到这个脚本,这就是为什么我正在寻找,看看是否有一个潜在的更有效的方式来做到这一点。Items.java类只是创建对象和objects。类只返回对象的名称,以便打印。所有这些代码都可以工作,但是当我添加更多项目时,我需要在其他类中不断将布尔值切换为true和false,以便运行AddToInventory和removefromininventory方法。

所以我的问题是,检查我是否需要添加和/或从库存(ArrayList)中删除多个对象的更有效的方法是什么?我考虑过对每个单独的检查使用一种方法(用于增加或减少库存),但排除了它,因为它与我上面的方法没有太大不同。谢谢大家!

我的想法是,如果我从另一个类调用这个方法,并将布尔值切换为true,这些方法执行if语句中的代码,并将从"目录"中添加或删除。ArrayList。我看到的低效率是,当从另一个类调用此方法时,我必须在参数中包含所有布尔值,例如:

if (//add check here)
{
Inventory.AddToInventory (boolean addFoodItem = true, boolean 
addDrinkItem = false, boolean addToyItem = false, boolean addCampingItem 
= false)
}

随着更多条目的添加,这是相当大的文本块。如果可能的话,这就是我想清理的地方。

如果我是你,我会做一个代表每个项目的Enum,在操作完成后(添加/删除),返回该Enum。这样,您将知道在哪种项上执行了操作。

同样,在你当前的代码中,比起多个if,有一个switch case看起来会更好。

我使用了@racraman的建议,并为所有项目创建了一个子类的超类,所以在一个方法中没有这个大的长参数的项目布尔值。从那以后,我添加了10个新对象,所以每次重复这个列表都很长很难看!

最新更新