E C*_*ung 4 lambda logging java-8
我会在这里尝试用我的措辞非常小心,因为lambda本质上只是一个方法签名和正文.
我的问题的前提是,能够保持简洁的语法lambda,并且能够使用人类可读的名称(字符串)来识别它,即当您将其注销时,这将非常有用.
以前,使用匿名类我总是可以覆盖toString.
final Runnable runnable = new Runnable() {
@Override public void run() { System.out.println("1"); }
@Override public String toString() { return "anonymous-1"; }
}
Run Code Online (Sandbox Code Playgroud)
方案
以下是我发现自己需要恢复代码以便能够消除的情况
问题 因为没有附带toString,所以当你尝试注销lambda引用时,你会在日志中获得所有内容,例如:
MyClass$$Lambda$1/424058530@1c20c684
Run Code Online (Sandbox Code Playgroud)
途径
欣赏人们在此期间及其周围的想法和经验.
这是一个中间地带,在语法上更紧凑,只是回到内部类 - 一个Runnable-with-toString工厂.
static Runnable makeRunnable(Runnable r, Supplier<String> toStringFn) {
return new Runnable() {
public void run() { r.run(); }
public String toString() { return toStringFn.get(); }
};
}
Run Code Online (Sandbox Code Playgroud)
现在,在使用网站上,您可以:
Runnable r = makeRunnable(() -> System.out.println("1"),
() -> "anonymous-1");
Run Code Online (Sandbox Code Playgroud)
(如果您没有理由相信toString方法需要访问任何状态,您可以将第二个参数转换为String而不是Supplier<String>.)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |