如果类具有`org`字段,则@ Slf4j会产生“非静态变量org无法引用”

问题描述

为什么,如果我的班级有一个org字段,则不能使用@Slf4j Lombok日志注释。以下代码将在第3行产生编译错误

MyClass.java:[3,1]非静态变量org无法从静态上下文中引用

import lombok.extern.slf4j.Slf4j;

@Slf4j
class MyClass {
  String org;

  void printDebug() { log.debug("Org: " + org); }
}

Lombok文档(projectlombok.org/features/log)声称它添加一个log字段。为什么与org冲突?

解决方法

如果在IntelliJ中,右键单击->重构-> Delombok-> @Log(和朋友),您将看到生成的字段初始化以 = org.slf4j...开头:

private static final Logger log = org.slf4j.LoggerFactory.getLogger(MyClass.class);
//                                ^^^ - this is ambiguous

这会与您的org字段产生冲突:

String org;
//     ^^^

Lombok团队可以通过注入import org.slf4j.LoggerFactory来解决此问题,但他们可能认为对该修复程序的需求不是很高。这是龙目岛贡献者的观点:

...这是Java语言的一个障碍,它对两个完全不同的概念使用相同的符号。不知道在lombok中可以做什么来解决此问题,而不在其他地方创建其他问题。 [REF]


解决方案:因此,如果您有org字段,只需将import lombok.extern.slf4j.Slf4j;@Slf4j替换为:

import static org.slf4j.LoggerFactory.getLogger;



  private static final Logger log = getLogger(MyClass.class);