修改方法中的枚举参数值

时间:2018-02-15 20:53:14

标签: java enums

物品

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。

我不知道如何通过修改枚举类字符的参数来实现这一点。任何帮助将不胜感激。

3 个答案:

答案 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)

我认为您想要将字符创建为类,而不是枚举。