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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:55:12