You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写枚举类Character的take(Item item)方法?

嘿,我来帮你搞定这个take(Item item)方法的实现!首先咱们得先把枚举类的结构理清楚,然后一步步实现核心逻辑。

步骤1:先定义Item枚举类

首先咱们先把带描述的Item枚举写出来,每个物品实例都包含对应的描述:

public enum Item {
    SWORD("一把锋利的钢剑"),
    SHIELD("一面坚固的木盾"),
    POTION("一瓶疗伤魔法药剂");

    private final String description;

    Item(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

步骤2:实现Character枚举类与take方法

接下来是Character枚举,这里要注意几个关键点:

  • 每个角色实例需要可变的物品属性(因为要移除物品),所以不能把heldItem设为final
  • take方法的逻辑很直接:检查当前角色是否持有指定物品,是就移除并返回true,否则返回false
public enum Character {
    LAURA("勇敢的战士", Item.SWORD),
    SALLY("睿智的法师", Item.POTION),
    ANDY("狡诈的小偷", null),
    ALEX("友善的铁匠", Item.SHIELD);

    private final String description;
    private Item heldItem; // 可变的持有物品属性

    // 构造方法初始化描述和初始持有物品
    Character(String description, Item heldItem) {
        this.description = description;
        this.heldItem = heldItem;
    }

    // 常规的getter方法
    public String getDescription() {
        return description;
    }

    public Item getHeldItem() {
        return heldItem;
    }

    // 核心的take方法实现
    public boolean take(Item item) {
        // 检查当前是否持有目标物品(注意处理null的情况)
        if (heldItem != null && heldItem.equals(item)) {
            heldItem = null; // 移除物品
            return true;
        }
        // 不持有目标物品,返回false
        return false;
    }
}

测试示例

咱们可以写个简单的测试代码验证逻辑是否正常:

public class TestCharacterTake {
    public static void main(String[] args) {
        // 测试LAURA持有SWORD,尝试拿走它
        System.out.println(Character.LAURA.take(Item.SWORD)); // 输出 true
        System.out.println(Character.LAURA.getHeldItem()); // 输出 null

        // 测试LAURA再次拿SWORD,此时已经没有了,返回false
        System.out.println(Character.LAURA.take(Item.SWORD)); // 输出 false

        // 测试ANDY本来就没持有物品,拿任何物品都返回false
        System.out.println(Character.ANDY.take(Item.POTION)); // 输出 false
    }
}

额外注意事项

如果你的代码会在多线程环境下运行,建议给heldItem加上volatile修饰符,保证线程间的可见性:

private volatile Item heldItem;

内容的提问来源于stack exchange,提问作者servoRob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:26:00