物品
public enum Item
{
SANDWICH("sandwich"), CRISPS("crisps"), DRINK("drink");
private String description;
Item(String description)
{
this.description = description;
}
public String toString()
{
return description;
}
}
字符
public enum Character
{
LAURA("Laura",Item.SANDWICH),SALLY("Sally", Item.CRISPS),ANDY("Andy", Item.DRINK),ALEX("Alex", null);
private String charDescription;
private Item item;
private Character(String Chardescription, Item item) {
this.charDescription = charDescription;
this.item = item;
}
public String toString()
{
return charDescription;
}
public boolean take(Item item)
{
}
我写了这两个枚举类,其中 Item 包含带有描述的项目, Character 有四个不同的Character对象:LAURA,SALLY,ANDY和ALEX,每个都参数化描述和项目。该项目可能为空。
我需要编写一个方法 take(Item item),它接受指示 如果角色有该项,则来自角色的项目,如果成功从角色中获取该项目,则返回true,否则返回false。
我不知道如何通过修改枚举类字符的参数来实现这一点。任何帮助将不胜感激。
答案 0 :(得分:2)
与您的感受相反,enum
实例不是不可变的。只需修改枚举的item
字段:
public boolean take(Item item) {
if (item == this.item) {
this.item = null;
return true;
}
return false;
}
答案 1 :(得分:2)
枚举值设计为常量值 看看Oracle examples:Day,Planet。
没有明确表示枚举值状态必须是不可变的,但我发现在编译时定义的具有可变状态的常量事物非常直观。
另请注意,在JDK(或第三方库)中定义的枚举值大部分时间都是不可变的。
对于班级而言,可变性似乎更加自然和可取。
所以我建议他们在实例化后不改变他们的状态 如果你需要改变它们的值,使用一个类可能更有意义。
请注意,在枚举类中定义读取方法,例如:
public boolean hasItem(Item item){
return item == this.item;
}
毫不犹豫地有效。
答案 2 :(得分:0)
我认为您想要将字符创建为类,而不是枚举。