簡體   English   中英

龍目島SLF4J隱含繼承問題

[英]Lombok SLF4J impl inheritance issues

我在多模塊Maven項目中遇到Lombok的問題。 我有兩節課:

@Slf4j
public class Parent {}

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

還有一個父Maven項目,其中定義了lombok依賴項。 還有一個子Maven項目,其中我將父項目定義為Maven父項目。

當我在Child類中使用生成的log實例時,發生編譯錯誤:

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

我可以通過兩種方式解決該問題:

  • 我手動創建了一個名為“ log”的私有字段。
  • 我在子Maven項目中定義了Lombok依賴項。

為什么這樣? 有什么解決方法/定義lombok依賴項的最佳方法嗎?

謝謝你的幫助。

使用:

  • 龍目島1.16.18
  • JDK 1.8
  • Maven 3.5.3

繼承不會以任何方式影響您的問題。 當您使用@Slf4j批注時,Lombok會創建private static final字段,並且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項目,您需要確保正確指定了模塊間依賴關系。 如果lombok在類路徑中,則所有功能都可以在開箱即用的情況下正常運行。

我發現了為什么子項目的依賴項樹中的Lombok依賴項在提供的范圍內。 我在依賴項中添加了Lombok,然后正確生成了該字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM