Когда я хочу сослаться на метод в текущей области, мне все равно нужно указать имя класса (для статических методов) или this
перед оператором ::
. Например, мне нужно написать:
import java.util.stream.Stream;
public class StreamTest {
public static int trimmedLength(String s) {
return s.trim().length();
}
public static void main(String[] args) {
System.out.println(Stream.of(" aaa ", " bb ", " c ")
.mapToInt(StreamTest::trimmedLength).sum());
}
}
Это не такая уж большая проблема для this
, но иногда статические методы выглядят переполненными, так как имя класса может быть довольно длинным. Было бы неплохо, если бы компилятор позволил мне вместо этого написать просто ::trimmedLength
:
public static void main(String[] args) {
System.out.println(Stream.of(" aaa ", " bb ", " c ")
.mapToInt(::trimmedLength).sum());
}
Однако компилятор Java-8 этого не позволяет. Мне кажется, что было бы вполне логично, если бы имя класса/объекта разрешалось так же, как это делается для обычного вызова метода. Это также будет поддерживать статический импорт для ссылок на методы, что также может быть полезно в некоторых случаях.
Итак, вопрос в том, почему такой или подобный синтаксис не был реализован в Java 8? Возникнут ли проблемы с таким синтаксисом? Или это просто вообще не рассматривалось?