2017-04-20 26 views
1

私はおおよそ次の形状(ComponentRegistry.java)の素敵な機能コードがあります。ラムダに名前を付けることはできますか?

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

それが文をLog4jのために来るとき、それは次の出力を生成すること、それに伴う問題:

実際のメソッド名が来る
ComponentRegistry lambda$doExport$1 

を"lambda"キーワードの後に​​、匿名クラス($)に関する2つのヒントがあります。これは、直接メソッド呼び出しのログと同じくらい良いものではありません。

log4j出力またはスタックトレースでlambdaを適切にラベル付けする方法を知っている人がいるかどうかは驚くべきものでした。

+4

'key'と' type'を引数とし、それをforEachの中で呼び出すMethodを作成するだけですね。 – Fabian

+2

LambdasはJava 8の名前を持つことはできません。トレースで表示されるのは実際には、Javaコンパイラがそのラムダのために作成したメソッドの名前であり、変更される可能性があります。 @Fabianが示唆したように、メソッド参照を使用して、機能インタフェースのネーミング実装を行うことができます。 –

+0

log4jでクラス名を使用する必要がありますか?代わりにファイル名を使用するのはどうですか? – Arkadiy

答えて

8

名前を付ける場合は、ラムダ(明示的には匿名関数)を使用しないでください。代わりにそれを自分のクラスに分解してください。

関連する問題