java - 与标志中的逻辑运算符一起使用的两个枚举的平方

标签 java enums flags

所以,我有这个枚举:

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

我想要这样的类(class):

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;
}

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

最佳答案

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

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

关于java - 与标志中的逻辑运算符一起使用的两个枚举的平方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280888/

相关文章:

java - 如何将流程的输入/输出流复制到对应的系统中?

java - 构造函数不能应用于给定类型?

java - @OneToMany关系: "one" id not persisted

java - Bukkit:为另一个玩家提供速度

Java 枚举 getDeclaringClass 与 getClass

android - Flags有什么用?

c# - Console.WriteLine(Enum.Value) 在 C# 和 VB.Net 中给出不同的输出

Java:不能在 switch 语句中使用通用枚举

Git 标记语法 : why do some flags have -one dash and some have --two?

c# - 从枚举总和中取回值