Dieses Problem hat mich auch gestört; deshalb habe ich dieses Projekt erstellt.
Damit kannst du folgendes machen:
final ThrowingFunction f = deineMethodenreferenzHier;
Es gibt insgesamt 39 von der JDK definierte Schnittstellen, die ein äquivalentes Throwing
haben; diese sind alle @FunctionalInterface
s, die in Streams verwendet werden (der Basistyp Stream
aber auch IntStream
, LongStream
und DoubleStream
).
Und da jede von ihnen ihre nicht werfende Gegenstück erweitern, können Sie sie auch direkt in Lambdas verwenden:
myStringStream.map(f) // funktioniert
Das Standardverhalten besteht darin, dass wenn Ihre werfende Lambda eine geprüfte Ausnahme wirft, eine ThrownByLambdaException
mit der geprüften Ausnahme als Ursache geworfen wird. Sie können diese also erfassen und die Ursache erhalten.
Weitere Funktionen stehen ebenfalls zur Verfügung.