Warum muss der Klassen- / Objektname für Methodenverweise explizit angegeben werden?

Wenn ich auf die Methode im aktuellen Bereich verweisen möchte, muss ich noch den Klassennamen (für statische Methoden) oder @ angebethis Vor:: Operator. Zum Beispiel muss ich schreiben:

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());
    }
}

Es ist nicht so großes Problem fürthis, aber manchmal sehen statische Methoden überfüllt aus, da der Klassenname ziemlich lang sein kann. Es wäre schön, wenn der Compiler mir erlauben würde, einfach @ zu schreibe::trimmedLength stattdessen

public static void main(String[] args) {
    System.out.println(Stream.of("  aaa  ", "  bb ", " c ")
            .mapToInt(::trimmedLength).sum());
}

Java-8-Compiler lässt dies jedoch nicht zu. Für mich scheint es ziemlich konsistent zu sein, wenn der Klassen- / Objektname auf die gleiche Weise aufgelöst würde, wie es beim normalen Methodenaufruf der Fall ist. Dies würde auch statische Importe für Methodenreferenzen unterstützen, die in bestimmten Fällen ebenfalls nützlich sein können.

So ist die Frage, warum eine solche oder ähnliche Syntax in Java 8 nicht implementiert wurde? Gibt es irgendwelche Probleme, die bei einer solchen Syntax auftreten würden? Oder wurde es einfach gar nicht berücksichtigt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage