Какая разница между типами ссылочных типов экземпляров в Java 8?
Итак, Java 8 вводит ссылки на методы, а docs описывают четыре типа.
Мой вопрос в том, какая разница между двумя типами экземпляров?
- Ссылка на метод экземпляра конкретного объекта.
- Ссылка на метод экземпляра произвольного объекта определенного типа.
Оба относятся к ссылкам, но что значительно отличается? Разве что тип вывода, используемый для их решения, отличается? Насколько важно, что (в их примерах) одно замыкание, а другое - лямбда? Это как-то связано с количеством аргументов метода?
Ответы
Ответ 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
вообще.
Я не уверен, есть ли реальная разница в поведении, я думаю, что это так же, как вы также можете вызвать статические методы для переменных экземпляра.