Почему имя класса / объекта должно быть явно указано для ссылок на методы?
Когда я хочу обратиться к методу в текущей области, мне все еще нужно указать имя класса (для статических методов) или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? Есть ли проблемы с таким синтаксисом? Или это просто не обсуждалось?