如何编写枚举类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
相关产品推荐
相关产品推荐

