Heim  >  Artikel  >  Eine Ausnahme auslösen, anstatt zurückzukehren. Was ist der tatsächliche Typ, den die Methode zurückgibt?

Eine Ausnahme auslösen, anstatt zurückzukehren. Was ist der tatsächliche Typ, den die Methode zurückgibt?

王林
王林nach vorne
2024-02-22 13:58:141041Durchsuche

Der Java-Q&A-Artikel des PHP-Editors Zimo beantwortet eine häufig gestellte Frage: „Eine Ausnahme auslösen statt zurückgeben. Was ist der tatsächliche Typ, den die Methode in Java zurückgibt, wenn eine Methode eine Ausnahme auslöst?“ Methode Es ist tatsächlich ungültig, nicht die Art der ausgelösten Ausnahme. Das bedeutet, dass die Methode keinen Wert zurückgibt, sondern ihn direkt auslöst, wenn eine Ausnahme auftritt. Bei der Behandlung von Ausnahmen können Sie die Try-Catch-Anweisung verwenden, um Ausnahmen abzufangen und entsprechend zu behandeln, um die Stabilität und Zuverlässigkeit des Programms sicherzustellen.

Frageninhalt

Ich beschäftige mich eingehender mit einer URL 类的 openStream()-Methode in Java, um ihren tatsächlichen Rückgabetyp zu finden. Die Quelle stammt von OpenJDK:

public final InputStream openStream() löst java.io.IOException { aus Return openConnection().getInputStream(); }

Der Rückgabetyp ist offensichtlich InputStreams Objekt, eine abstrakte Klasse. Dies ist also der deklarierte Typ. Was ist der tatsächliche Typ des zurückgegebenen Objekts? Ich verfolge die Rückkehr von openConnection() 方法,该方法返回 URLConnection 类的对象。我还顺着它的源码找到了getInputSteam(). Endlich habe ich diesen Code gefunden:

Der öffentliche Eingabestream getInputStream() löst eine IOException { throw new UnknownServiceException("Das Protokoll unterstützt keine Eingabe"); }

Meine Frage ist, was ist die eigentliche Rückgabeart von getInputStream() 的实际返回类型是什么,这将是 openStream()?

Workaround

Hier ist ein Beispiel mit einer HTTPS-Adresse.

Verwenden Sie Debuggen des Prozesses und platzieren Sie einen Haltepunkt auf der URL#openStreamMethode.
Und ich meine die eigentliche Methode, nicht Ihren Anruf.

Von hier aus „treten“ Sie in die openConnection-Methode ein.
Dann „treten“ Sie in die openConnection(URL)-Methode ein.

Hier gelangen Sie zur Klasse sun.net.www.protocol.https.Handler.

Fahren Sie erneut mit der Methode openConnection(URL, Proxy) fort, die eine neue Instanz von sun.net.www.protocol.https.HttpsURLConnectionImpl zurückgibt.

Wenn Sie weiter reisen, werden Sie feststellen, dass eine Instanz von HttpsURLConnection über die Klasse sun.net.www.protocol.https.DelegateHttpsURLConnection zurückgegeben wird.

Wissen Sie, als ich vor ein paar Jahren anfing, Java zu verwenden, hatte ich (fast) genau dieses Problem, außer dass ich darüber verwirrt war java.awt.Graphics .

Siehe Programmieren für eine Schnittstelle

Die Idee ist, dass Sie die genaue Klasse nicht wirklich kennen müssen – alles, was die Schnittstelle implementiert, kann ein- oder ausgewechselt werden. Dadurch wird der Code im Laufe der Zeit anpassungsfähiger.

Das obige ist der detaillierte Inhalt vonEine Ausnahme auslösen, anstatt zurückzukehren. Was ist der tatsächliche Typ, den die Methode zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen