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

问题描述 投票:0回答:1

为什么,如果我的类有

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
冲突?

java slf4j lombok
1个回答
5
投票

更换您的:

  • 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 中可以做什么来解决这个问题,而不在其他地方创建其他问题。 [参考]

© www.soinside.com 2019 - 2024. All rights reserved.