当前位置: 首页 > 知识库问答 >
问题:

Lombok SLF4J impl继承问题

汪跃
2023-03-14

我在我的多模块maven项目中面临Lombok的问题。我有两个类:

@Slf4j
public class Parent {}

@Slf4j
public class Child extends Parent {
    public void m() {
        log.debug("hello");
    }
}

还有一个父maven项目,其中定义了lombok依赖项。还有一个子maven项目,其中我将父项目定义为maven父项目。

当我在 Child 类中使用生成的日志实例时,会发生编译错误:

[ERROR] log has private access in <Child class>

我可以通过两种方式解决问题:

    < li >我自己手工创建了一个名为“log”的私有字段。 < li >我在子maven项目中定义了Lombok依赖项。

为什么这样定义lombok依赖的任何解决方法/最佳方式?

谢谢你的帮助。

使用:

  • 龙目岛1.16.18
  • JDK 1.8
  • Maven 3.5.3

共有2个答案

申屠锦
2023-03-14

我找到了原因,子项目的依赖关系树中的Lombok依赖关系在提供的范围内。我在dependency中添加了Lombok,然后字段就正确地生成了。

宰父存
2023-03-14

继承不应该以任何方式影响你的问题。当您使用< code>@Slf4j注释时,Lombok会创建< code>private static final字段,并且不会继承< code>static字段。在您的情况下,生成的代码如下所示:

public class Parent {
    private static final Logger log = LoggerFactory.getLogger(Parent.class);

    public Parent() {}
}

public class Child extends Parent {
    private static final Logger log = LoggerFactory.getLogger(Child.class);

    public Child() {}

    public void m() {
        log.debug("hello");
    }
}

对于多模块 maven 项目,您需要确保正确指定模块间的依赖关系。如果龙目岛在类路径上,那么一切应该开箱即用。

 类似资料:
  • 并尝试通过Hibernate使用策略连接实现继承,但当我使用此策略时,我收到异常: 奇怪的是,如果我选择另一个策略(单表或TABLE_PER_CLASS),错误不会出现

  • 问题内容: 我有三节课: 现在在我的主要职能中,我做这样的事情: 但这会产生2个编译时错误: 无法将A转换为fileHandler 无法将B转换为fileHandler 如果基类不是泛型的,那么我如何摆脱这些错误呢? 更新: 我的班级层次结构是: 调用函数的C类或 调用函数的D类。 C和D都从抽象类E派生。 现在,我应该如何在C和D以及E中定义这些功能: 我给出了以下内容: E: C: D: C,

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 我在尝试解组对象时遇到了继承问题。这是我的班级 A. B C 容器 然后输入XML文件 我使用了EclipseLink JAXB与Spring OXM集成。当我将xml文件解组到容器实例时,所有内容都是重复的。在列表B中,我有两个重复的B实例(与列表C相同)。 请让我知道我做错了什么?谢谢你!

  • 问题内容: 鉴于Main.java: 结果为: 0 4. 但是,如果a.print输出引用A类,为什么为什么不输出“ A”呢?我怎么知道在这种情况下何时调用一种方法?为什么要调用A的构造函数而仍然使用B的方法? 问题答案: 由于多态性而调用打印。调用的方法取决于的运行时类型,即。何时调用无关紧要;多态总是适用。 两次都调用的方法。一次来自的构造函数,由中的默认构造函数调用。另外一次是您显式致电。