【问题标题】:Cannot refer to the static enum field Cbev2Key.log within an initializer无法在初始化程序中引用静态枚举字段 Cbev2Key.log
【发布时间】:2017-08-28 09:45:14
【问题描述】:

我目前在我的枚举类中使用@Log4j2,如下所示:

import lombok.extern.log4j.Log4j2;
@Log4j2
public enum Cbev2Key
{
....
....
}

我在代码中使用这个“日志”变量将这样的日志放在构造函数中:

CbeV2Key(final String value, final IonType type,final boolean isMandatoryKey)
    {
        if(StringUtils.isEmpty(value) || type == null) {
            log.fatal("Empty/Null value/type not permitted value : " + value + " type : " + type);

        }

        this.type = type;
        this.isMandatoryKey = isMandatoryKey;
    }

在日志变量中它向我显示了这个错误

“无法在初始化程序中引用静态枚举字段 Cbev2Key.log。”

为什么会出现这个错误?

【问题讨论】:

    标签: java enums constructor log4j2


    【解决方案1】:

    Lombok 的@Log4j2 注解生成一个静态的log 字段:

    https://projectlombok.org/api/lombok/extern/log4j/Log4j2.html

    但是枚举元素在静态字段之前被初始化。

    因此,Enum 的构造函数不能像记录器那样访问未初始化的静态数据。

    【讨论】:

    • 是的,这很好,但我在构造函数中提到的变量不是静态的,这些都是私有字段。
    • @mshikher log 是静态的。它在错误消息中。
    • 我该如何解决这个问题?如果我不能这样做,我该如何登录?
    • @mshikher 尝试在构造函数中直接使用LogManager.getLogger(Cbev2Key.class) 而不是log 变量。
    猜你喜欢
    • 2023-03-24
    • 2011-05-15
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多