Подтвердить что ты не робот

Какая разница между типами ссылочных типов экземпляров в Java 8?

Итак, Java 8 вводит ссылки на методы, а docs описывают четыре типа.

Мой вопрос в том, какая разница между двумя типами экземпляров?

  • Ссылка на метод экземпляра конкретного объекта.
  • Ссылка на метод экземпляра произвольного объекта определенного типа.

Оба относятся к ссылкам, но что значительно отличается? Разве что тип вывода, используемый для их решения, отличается? Насколько важно, что (в их примерах) одно замыкание, а другое - лямбда? Это как-то связано с количеством аргументов метода?

4b9b3361

Ответ 1

1) myString::charAt возьмет int и вернет a char и может быть использован для любой лямбда, которая работает именно так. По существу, он преобразуется в index -> myString.charAt(index).

2) String::length возьмет a String и вернет a int. По существу, он преобразуется в string -> string.length().

Я даже не уверен, что String::charAt переведет на (string, index) -> string.charAt(index). Я бы этого ожидал.

Ответ 2

При этом они означают, что у вас есть следующее:

1) Может быть, например, this::someFunction;, это вернет ссылку someFunction для текущего объекта.

2) Может быть, например, String::toUpperCase, это вернет метод toUpperCase String вообще.

Я не уверен, есть ли реальная разница в поведении, я думаю, что это так же, как вы также можете вызвать статические методы для переменных экземпляра.