所以,我有这个枚举:
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/