gpt4 book ai didi

java - 用于调试目的的命名 (toString) Lambda 表达式

转载 作者:行者123 更新时间:2023-12-02 02:57:23 26 4
gpt4 key购买 nike

有时命名 lambda 很有用。特别是当您将它们作为参数传递时。

一个非常简单的例子是

public class Main {
public static void main(String[] args) {
Predicate<String> p = nameIt("isNotEmpty", (s) -> !s.trim().isEmpty());
maybePrint("Hello", p);
maybePrint(" ", p);
}

static <T> void maybePrint(T s, Predicate<T> pred) {
if (pred.test(s)) {
System.out.println(s.toString());
} else {
System.err.println(pred + " says no to \"" + s + "\"");
}
}
}

如果 jvm 能够提供一些功能来命名 lambda,而不会失去幕后的出色性能优化,那就太好了。

像这样对我来说很好:

Predicate<String> p = nameIt("isNotEmpty", (s) -> !s.trim().isEmpty());

最佳答案

这是我想到的一个替代方案:

static <T> Predicate<T> nameIt(String name, Predicate<? super T> pred) {
return new Predicate<T>() {
public String toString() { return name; }
public boolean test(T t) { return pred.test(t); }
};
}

这看起来很简单。虽然我还没有对它进行基准测试,但看起来它应该相当快。它添加了一个对象和一个方法调用,并且避免了装箱/拆箱开销。

缺点是您必须为要为其提供命名实例的每个功能接口(interface)编写一个像这样的小函数。

关于java - 用于调试目的的命名 (toString) Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com