为什么,如果我的类有
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
冲突?
更换您的:
import lombok.extern.slf4j.Slf4j;
和@Slf4j
与:import static org.slf4j.LoggerFactory.getLogger;
private static final Logger log = getLogger(MyClass.class);
如果您在 IntelliJ 中右键单击 -> Refactor -> 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
来解决这个问题,但他们可能认为修复的需求不是那么高。这是 Lombok 贡献者的意见:
...这是java语言的一个障碍,它对两个完全不同的概念使用相同的表示法。不知道在 lombok 中可以做什么来解决这个问题,而不在其他地方创建其他问题。 [参考]