Cyclic Interface Error bei Verwendung von orElseThrow

8

Verwenden Sie Guava's ClassPath Ich versuche, Klassen in einem bestimmten Paket zu initialisieren, aber ich möchte den Konstruktor zur Initialisierung verwenden, da dadurch keine Ausnahmen propagiert werden. Also das ist, was ich erarbeitet habe, um Konstrukteure zu bekommen:

%Vor%

Dies führt jedoch zu einem Fehler in InteliJ, indem einfach die zyklische Schnittstelle angegeben wird. Ich denke, ich weiß, was eine zyklische Schnittstelle ist, aber ich bin nicht sicher, warum das diesen Fehler verursachen würde. Soweit ich weiß, solange der Rückgabetyp bekannt ist (was für orElseThrow einen Rückgabewert hat, in diesem Fall als Constructor<?> ), sollte eine unkontrollierte Ausnahme ausgelöst werden. Wenn ich orElse(null) verwende, verschwindet der Fehler. Was ist hier los und wie kann ich die RuntimeException werfen, die ich werfen möchte?

    
danthonywalker 04.11.2015, 18:18
quelle

1 Antwort

0

Die Laufzeitausnahme wird aus der Map Lambda geworfen. Die acual-Ausnahme könnte innerhalb der Stream-API behandelt werden.

Um dies zu vermeiden, können Sie die flatMap-Methode verwenden, um den aktuellen Stream durch die kombinierten Streams zu ersetzen, die für Ihre flatMap-Methode bereitgestellt werden. Dies wird normalerweise beim Kombinieren von Streams verwendet. Siehe auch das Beispiel von adam bien auf der Flatmap.

In diesem Beispiel muss die Ausnahme nicht durch die Streaming-API gehen. Sie könnten also auch überprüfte Ausnahmen verwenden und nicht durch die Signatur in der Stream-Schnittstelle eingeschränkt werden, die keine throws-Klausel hat.

%Vor%     
stalet 26.11.2015, 08:55
quelle

Tags und Links