Я хочу заменить потребность в отдельных автономных статических функциях инициализации лямбда-выражениями. например Я бы хотел заменить что-то подобное...
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
. В чем смысл вашей лямбда-версии? - person a better oliver   schedule 31.10.2015static { }
) и вызывать там свои инициализации? - person Zhedar   schedule 31.10.2015