如何用Java合理实现对应UML图的Material类以支持Material.oak调用?
你的实现存在两个核心问题:
- 你将材质枚举定义为了
Material普通类的内部静态枚举,要访问枚举值必须写Material.material.oak,无法满足作业要求的Material.oak调用方式 - 材质成本用独立数组存储,和枚举值分离,后续维护很容易出现下标对应错误的问题
正确的实现方式是直接将Material定义为枚举类,把成本作为枚举实例的内置属性:
public enum Material { // 对应橡木、山毛榉、白蜡木,依次传入对应成本 oak(1), beech(2), ash(3); // 存储当前材质的成本,用final避免被修改 private final int cost; // 枚举类构造方法默认访问权限为private Material(int cost) { this.cost = cost; } // 提供公共方法获取材质成本 public int getCost() { return cost; } }
修改后你可以直接通过Material.oak获取橡木对应的枚举实例,完全符合Table(Material.oak)的用法,同时每个材质的成本和枚举值绑定,逻辑更合理,也避免了数组下标匹配错误的问题。
内容的提问来源于stack exchange,提问作者Iwan5050
相关产品推荐
相关产品推荐

