Как Java 8+ выводит ссылку на метод в качестве потребителя? [Дубликат]

То, о чем вы просите, не связано с тематикой.

  1. Создайте папку layouts/partials/ в вашем репо (если она не существует).
  2. Скопируйте themes/minimal/layouts/partials/list-item.html в layouts/pairtials/list-item.html
  3. Измените эту строку :
    {{ $.Scratch.Get "subtitle" }}
    -
    {{ if not .Params.hidedate }}
    {{ $.Scratch.Get "subtitle" }}
    {{ end }}
  4. В заголовке yaml вашего сообщения добавьте hidedate: true, например:
    ---
    title: "Creating a New Theme"
    tags: ["go", "golang", "hugo", "themes"]
    hidedate: true
    draft: false
    --- 
    
    ]

Это отключит дату, другие обычные сообщения остаются незатронутыми.

0
задан kakabali 19 January 2019 в 17:39
поделиться

1 ответ

Компилятор Java-8 просматривает соответствующие объявления методов:

  • public void forEach(Consumer<? super T> в интерфейсе Iterable<T>
  • public void accept(T t) в интерфейсе Consumer<T>
  • [ 1114] public static String test(String) в вашем классе Runner

Из всего этого следует, что Consumer<String> подойдет.

Следовательно, он расширяет ссылку на метод Runner::test на реализацию интерфейса Consumer<String>, который делегирует методу test(String).

Строка

Arrays.asList(testArgs).forEach(Runner::test);

расширена до чего-то эквивалентного этому:

Arrays.asList(testArgs).forEach(new Consumer<String>() {        
    @Override
    public void accept(String t) {
        test(t);
    }
});

На самом деле это не совсем то же самое, но использует некоторую оптимизацию JVM, чтобы избежать накладных расходов анонимного класса , Но погружение в эти детали JVM привело бы сюда слишком далеко.

0
ответ дан Thomas Fritsch 19 January 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: