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

标签 java enums constructor log4j2

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

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

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

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

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

"Cannot refer to the static enum field Cbev2Key.log within an initializer."

为什么我会收到此错误?

最佳答案

Lombok的@Log4j2注释生成静态log字段:

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

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

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

关于java - 无法在初始化程序中引用静态枚举字段 Cbev2Key.log,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45916085/

相关文章:

java - 具有很多字段的枚举设计

c++ - 从派生构造函数调用基类方法

oop - Fortran 构造函数返回指向已分配对象的指针

java - Relace HWPFDocument段落文本使用java结果输出奇怪

swift - 在 swift iOS 中出现意外值时,如何将 nil 设置为可编码枚举

java - Android 选项卡式 Activity - 将微调器值从嵌套 fragment 传递到父 Activity 中的选项卡 fragment

c# - 使用 Key = Enums Name 和 Value = Enums value 使用最佳技术创建键值对列表

javascript - 在 Javascript 中,函数声明是创建构造函数的唯一方法吗?

java - EclipseLink/MySQL/Glassfish - 未创建表,即使连接正常

java - Java String 如何在内部删除所有非数字工作?