2017-04-20 258 views
1

我有很好的功能代碼大致下一形狀(ComponentRegistry.java):我可以給lambda一個名字嗎?

public void doExport() { 
    config.exports().forEach((key, type) -> { 
     ... 
    } 
} 

它,當它涉及到的log4j聲明它會產生一個輸出的問題:

ComponentRegistry lambda$doExport$1 

如果實際的方法名稱來在「lambda」關鍵字之後,然後有兩個有關匿名類的提示($)。它不如直接方法調用記錄。

我想知道是否有人在log4j輸出或堆棧跟蹤中正確標記lambda表達式,因爲它會很棒。

+4

爲什麼不簡單地創建一個以'key'和'type'爲參數並在forEach中調用它的方法? – Fabian

+2

Lambdas的名稱不能是Java 8.你在trace中看到的實際上是java編譯器爲該lambda下的lambda創建的方法的名稱,它可能會更改。正如@Fabian建議的那樣,函數接口的命名實現可以使用方法引用完成。 –

+0

你必須在log4j中使用類名嗎?如何使用文件名呢? – Arkadiy

回答

8

如果你想給它一個名字,不要使用lambda(這是明確的匿名函數)。相反,把它分解成它自己的類。

相關問題