问题描述
为什么,如果我的班级有一个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);