Инструменты для получения графического графика вызова функции [закрытого] кода

Компилятор 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 привело бы сюда слишком далеко.

102
задан Lightness Races with Monica 15 November 2011 в 10:13
поделиться

3 ответа

49
ответ дан jacknad 24 November 2019 в 04:34
поделиться

Понимают , делает очень хорошее задание создания графов вызовов.

17
ответ дан MattK 24 November 2019 в 04:34
поделиться

AstrГ©e является самым устойчивым и сложным инструментом там, по моему скромному мнению.

3
ответ дан ЯegDwight 24 November 2019 в 04:34
поделиться
Другие вопросы по тегам:

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