Java游戏开发:创建便捷智能的Amounts数量标识类方法指导
实现灵活的物品数量标识工具类Amounts
首先明确:Java语法不允许标识符以数字开头,所以Amounts.1M这种写法无法直接实现,下面提供两种符合语法且无需枚举所有数值的智能实现方案。
方案一:静态方法后缀式(简洁直观)
通过静态方法封装后缀对应的倍数,调用时直接传入数字+方法后缀,最接近你想要的简洁写法。
public class Amounts { // 千级(1k = 1000) public static long k(long num) { return num * 1000; } // 百万级(1M = 1000000) public static long m(long num) { return num * 1000000; } // 支持浮点数输入(比如0.5M = 500000) public static long m(double num) { return (long) (num * 1000000); } public static long k(double num) { return (long) (num * 1000); } // 可选:扩展十亿级等更大单位 public static long b(long num) { return num * 1000000000; } }
使用示例
new Item(ItemsList.COINS, Amounts.m(1)); // 对应100万金币 new Item(ItemsList.FISH, Amounts.k(2)); // 对应2000条鱼 new Item(ItemsList.GEMS, Amounts.m(0.5)); // 对应50万宝石
方案二:字符串解析式(灵活扩展)
如果想要直接使用类似"1M"、"2k"的字符串格式,可通过字符串解析实现,支持任意合法数字+后缀组合,无需提前定义所有可能的数值。
public class Amounts { // 后缀与倍数的映射,可按需扩展 private static final Map<Character, Long> SUFFIX_MULTIPLIERS = Map.of( 'k', 1000L, 'm', 1000000L, 'b', 1000000000L ); public static long parse(String amountStr) { if (amountStr == null || amountStr.isBlank()) { throw new IllegalArgumentException("数量字符串不能为空"); } char lastChar = amountStr.charAt(amountStr.length() - 1); // 判断最后一位是否为后缀字母 if (Character.isLetter(lastChar)) { String numberPart = amountStr.substring(0, amountStr.length() - 1); double number = Double.parseDouble(numberPart); Long multiplier = SUFFIX_MULTIPLIERS.get(Character.toLowerCase(lastChar)); if (multiplier == null) { throw new IllegalArgumentException("不支持的数量后缀:" + lastChar); } return (long) (number * multiplier); } else { // 无后缀,直接解析为长整数 return Long.parseLong(amountStr); } } }
使用示例
new Item(ItemsList.COINS, Amounts.parse("1M")); // 100万金币 new Item(ItemsList.FISH, Amounts.parse("2k")); // 2000条鱼 new Item(ItemsList.IRON, Amounts.parse("350")); // 350个铁矿
注意:如果坚持要
Amounts.1M的写法,Java语法无法支持,因为标识符不能以数字开头。枚举所有数值的方案不符合你“智能实现”的需求,因此不推荐。
内容的提问来源于stack exchange,提问作者SpicyCodexff00
相关产品推荐
相关产品推荐

