gpt4 book ai didi

java - JDK 库是否提供 lambda 'invoker' 实用程序类?

转载 作者:行者123 更新时间:2023-11-30 06:11:56 26 4
gpt4 key购买 nike

我正在寻求用 lambda 代替对单独的独立静态初始化函数的需求。例如我想更换这样的东西......

class Foo {
private static final Set<String> keywords = keywords();

private static Set<String> keywords() {
HashSet<String> s = new HashSet<>();
s.add("AND");
s.add("NOT");
s.add("OR");
return Collections.unmodifiableSet(s);
}
}

使用调用在类加载时就地定义的 lambda 的东西。请注意,懒惰地调用它不是我的目标。

目前,我创建了一个简单的 Initializer 类,它带有一个接受 Supplier 的静态方法,调用它并返回值。

初始化

public class Initializer {
public static <T> T init(Supplier<T> initializer) {
return initializer.get();
}
}

然后在另一个类中:

import static com.whatever.Initializer.init;

class Foo {
private static final Set<String> keywords = init(() -> {
HashSet<String> s = new HashSet<>();
s.add("AND");
s.add("NOT");
s.add("OR");
return Collections.unmodifiableSet(s);
});
}

标准 Java 库中是否已经存在一些东西,这样我就不需要提供自己的 Initializer 类,或者是否有一些方法可以简单地定义然后执行 lambda in-地方?

最佳答案

你可以只转换 lambda 并调用它:

private static final Set<String> KEYWORDS = ((Supplier<Set<String>>) () -> {
Set<String> result = new HashSet<>();
...
return Collections.unmodifiableSet(result);
}).get();

或者您可以使用现有的快捷方式:

private static final Set<String> KEYWORDS = 
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AND", "NOT", "OR")));

但是你的原始代码,调用一个方法,可读性很强。我不会改变它。

关于java - JDK 库是否提供 lambda 'invoker' 实用程序类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452756/

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