Java中如何识别不同枚举类型?实现evaluateType方法需求
实现evaluateType方法判断枚举类型的解决方案
问题说明
现有代码需要实现evaluateType方法,判断传入的枚举实例属于Vehicle.Car还是Vehicle.BIKE类型。有人担心枚举在内存中以整数形式存储,不确定是否能实现这个判断,其实完全可行,Java提供了直接的API可以轻松处理。
几种实现方案
方案1:通过getClass()直接判断
每个枚举实例都能通过getClass()获取自身所属的枚举类,直接对比类对象即可:
public static String evaluateType(Enum<?> enumInstance) { if (enumInstance.getClass() == Vehicle.Car.class) { return "Car"; } else if (enumInstance.getClass() == Vehicle.BIKE.class) { return "Bike"; } return "Unknown"; }
方案2:使用instanceof关键字判断
和普通对象一样,枚举实例也能用instanceof判断所属类型,这种写法更直观:
public static String evaluateType(Object obj) { if (obj instanceof Vehicle.Car) { return "Car"; } else if (obj instanceof Vehicle.BIKE) { return "Bike"; } return "Unknown"; }
方案3:用getDeclaringClass()处理特殊情况
如果你的枚举实例存在匿名子类(比如给某个枚举值添加了自定义方法),getClass()会返回子类对象,这时候用getDeclaringClass()能拿到原始的枚举类,判断更准确:
public static String evaluateType(Enum<?> enumInstance) { Class<?> enumClass = enumInstance.getDeclaringClass(); if (enumClass == Vehicle.Car.class) { return "Car"; } else if (enumClass == Vehicle.BIKE.class) { return "Bike"; } return "Unknown"; }
完整测试代码
把方法放到Main类里,测试效果如下:
public class Vehicle { public enum Car { CAR1, CAR2, CAR3, CAR4 } public enum BIKE { BIKE1, BIKE2, BIKE3 } } public class Main { public static void main(String args[]) { Vehicle.Car value1 = Vehicle.Car.CAR1; Vehicle.BIKE value2 = Vehicle.BIKE.BIKE1; System.out.println(evaluateType(value1)); // 输出: Car System.out.println(evaluateType(value2)); // 输出: Bike } // 这里选用方案3的实现,适配更多场景 public static String evaluateType(Enum<?> enumInstance) { Class<?> enumClass = enumInstance.getDeclaringClass(); if (enumClass == Vehicle.Car.class) { return "Car"; } else if (enumClass == Vehicle.BIKE.class) { return "Bike"; } return "Unknown"; } }
内容的提问来源于stack exchange,提问作者Mritunjay Choubey
相关产品推荐
相关产品推荐

