Я ищу, чтобы заменить необходимость отдельных автономных статических инициализационных функций с lambdas. например Я хотел бы заменить что-то вроде этого ...В библиотеках JDK предоставляется класс лямбды 'invoker'?
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);
}
}
С чем-то, что вызывает лямбда, который определяется на месте во время загрузки класса. Обратите внимание, что это не моя цель, чтобы вызвать это лениво.
На данный момент я создал простой класс Initializer
со статическим методом, который принимает Supplier
, вызывает его и возвращает значение.
Initializer
класс
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
класс, или есть какой-то способ просто определить, а затем выполнить лямбда на месте?
Вам не нужен метод инициализации 'keywords'. Что такое точка вашей лямбда-версии? – zeroflagL
Почему именно вам нужны лямбда? Похоже, вам нужен только статический блок инициализатора ('static {}') и вызывать свои inits там? – Zhedar
Связанный: [Как инициализировать карту с помощью лямбда?] (Http://stackoverflow.com/questions/32868665/how-to-initialize-a-map-using-a-lambda) –