Gibt es für die innere Klasse der äußeren Klasseninstanz etwas Ähnliches für StaticClass::new
?
Bearbeiten:
i.e. wenn ich
habe %Vor% Ich kann Outer o = new Outer(); Inner i = o.new Inner()
in altem Java machen. Wie kann ich das o.new Inner()
als Funktionsreferenz ausdrücken?
Nach den Oracle-Tutorials gibt es vier Arten von Methodenreferenzen:
ContainingClass::staticMethodName
containingObject::instanceMethodName
ContainingType::methodName
ClassName::new
Verweise auf eine lokale / verschachtelte Klasse sind nicht aufgelistet, daher würde ich annehmen, dass sie nicht unterstützt wird.
Sie können das java.util.function.Supplier
auslösen die Verwendung von lambdas, um eine Instanz der geschachtelten Klasse zu erhalten:
Das Kapitel 15.13. Method Reference Expressions in der JLS enthält eine etwas kryptische Aussage dazu:
Die unmittelbar umschließende Instanz einer neuen inneren Klasseninstanz ( §15.9.2 ) wird von einer lexikalisch umschließenden Instanz von
this
bereitgestellt ( §8.1.3 ).
Dies bedeutet grundsätzlich, dass eine Methodenreferenz auf den Konstruktor einer inneren Klasse möglich ist in eine Methode der äußeren Klasse, wie in diesem Beispiel
%Vor% Aber die JLS erwähnt keine Alternative, daher muss man annehmen, dass es einfach nicht möglich ist, die umschließende Instanz in einer anderen Form als this
bereitzustellen.
Für eine statische geschachtelte Klasse können Sie mit der äußeren Klasse - OuterClass.NestedClass::new
:
Für die innere Klasse (geschachtelte nicht statische Klasse) können Sie outerInstanceName.new InnerClass(...)
:
Meine IDE schlägt mir vor, x -> a.new B(x)
in A.B::new
zu konvertieren, aber das kompiliert nicht, weil B nicht statisch ist - es gehört nicht zur Klasse A
, sondern zur Instanz der Klasse A
. Also beantworte deine Frage - ich denke es ist nicht möglich und du musst outerInstanceName.new InnerClass(...)
verwenden.
Tags und Links java java-8 lambda java-stream