Я определил экземпляр регистратора следующим образом:
private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
У меня есть массив строк, которые я хочу регистрировать, поэтому я использовал следующее:
Arrays.stream(new String[]{"ABC", "DEF", "XYZ"}).forEach(LOGGER::info);
Однако,в журнал ничего не печатается.Но если я изменю ссылочный метод на эквивалентную лямбда-форму, он напечатает в журнале:
Arrays.stream(new String[]{"ABC", "DEF", "XYZ"}).forEach(s -> LOGGER.info(s));
Что мне здесь не хватает?
Я также попробовал следующие подходы, и онивсе ведут себя одинаково:
Stream.of("ABC", "DEF", "XYZ").forEach(LOGGER::info);
List.of("ABC", "DEF", "XYZ").forEach(LOGGER::info);
Даже Intellij IDE выделяет s -> LOGGER.info(s)
желтым и предлагает изменить его на LOGGER::info
.
Я попытался определить собственный класс:
static class Consumer
{
void consume(String s)
{
LOGGER.info(s);
}
}
и использовать его вместо LOGGER::info
:
Consumer consumer = new Consumer();
Arrays.stream(new String[]{"ABC", "DEF", "XYZ"}).forEach(consumer::consume);
Печать в журнал!
В классе Logger
два перегруженныхметоды:
void info(String msg)
и
void info(Supplier<String> msgSupplier)
, но я полагаю, что только первый можно присвоить void forEach(Consumer<? super T> action)
.