两个枚举的平方,用于标志中的逻辑运算符

时间:2014-04-24 22:18:01

标签: java enums flags

所以,我有这个枚举:

public enum Loglevel {
    ERROR, WARNING, NOTICE, VERBOSE, INFO;
}

我想有这样的课程:

public class Log {
    public statoc Loglevel level = Loglevel.ERROR | Loglevel.WARNING | Loglevel.NOTICE | Loglevel.VERBOSE | Loglevel.INFO;
    public static void log(String message, Loglevel lvl) {
        if(level & lvl) {
            System.out.println(message);
        }
}

当然,要明白Loglevel.ERROR | Loglevel.WARNING是一个错误,但我需要类似的东西 - 而且我对java使用的所有特殊方法都很陌生。

如果没有别的,我当然可以这样:

public class Loglevel {
    public static final int ERROR = 1;
    public static final int WARNING = 2;
    public static final int NOTICE = 4;
}

但我认为可能会有一个更明智的解决方案。

1 个答案:

答案 0 :(得分:2)

您需要将LogLevel与另一个进行“比较”,以查看它是否足够高,以便记录日志级别。使用标志来表示位并使用按位数学来访问它们在这里不是一个好主意,因为不可能独立设置不同的标志组合,即它不能同时ERRORWARNING在同一时间。

我会拿你的枚举并为其添加一个整数level,并为每个Loglevel分配不同的数字。然后,在决定是否记录消息时,您可以将消息的Loglevel与当前Loglevel进行比较,以确定它是否足以记录。