为什么,如果我的类有一个org字段,我不能使用@Slf4jLombok 日志注释。以下代码将在第 #3 行产生编译错误:
MyClass.java:[3,1] 无法从静态上下文引用非静态变量 org
import lombok.extern.slf4j.Slf4j;
@Slf4j
class MyClass {
String org;
void printDebug() { log.debug("Org: " + org); }
}
Run Code Online (Sandbox Code Playgroud)
Lombok 文档 ( projectlombok.org/features/log ) 声称它添加了一个log字段。为什么它与 冲突org?
如果您在 IntelliJ 中右键单击 -> Refactor -> Delombok -> @Log (和朋友),您将看到生成的字段初始化以以下内容开头 = org.slf4j...:
private static final Logger log = org.slf4j.LoggerFactory.getLogger(MyClass.class);
// ^^^ - this is ambiguous
Run Code Online (Sandbox Code Playgroud)
这会产生与您的领域的冲突org:
String org;
// ^^^
Run Code Online (Sandbox Code Playgroud)
Lombok 团队可以通过注入来解决这个问题import org.slf4j.LoggerFactory,但他们可能认为修复的需求不是那么高。这是 Lombok 贡献者的意见:
...这是java语言中的一个障碍,它对两个完全不同的概念使用相同的表示法。不知道在 lombok 中可以做什么来解决这个问题,而不在其他地方创建其他问题。[参考]
解决方案:因此,如果您有org字段,只需替换您的:
import lombok.extern.slf4j.Slf4j;和@Slf4j和:import static org.slf4j.LoggerFactory.getLogger;
private static final Logger log = getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |