Maison  >  Article  >  Lancez une exception au lieu de revenir. Quel est le type réel renvoyé par la méthode ?

Lancez une exception au lieu de revenir. Quel est le type réel renvoyé par la méthode ?

王林
王林avant
2024-02-22 13:58:141037parcourir

L'article de questions-réponses Java proposé par l'éditeur PHP Zimo répondra à une question courante : "Lance une exception au lieu de renvoyer. Quel est le type réel renvoyé par la méthode ? En Java, lorsqu'une méthode lève une exception, le type de retour de la méthode est renvoyé. méthode C'est en fait nul, pas le type d'exception levée. Cela signifie que la méthode ne renvoie aucune valeur, mais la renvoie directement lorsqu'une exception est rencontrée. Lors de la gestion des exceptions, vous pouvez utiliser l'instruction try-catch pour intercepter les exceptions et les gérer en conséquence afin de garantir la stabilité et la fiabilité du programme.

Contenu de la question

J'approfondis une méthode URL 类的 openStream() en Java pour trouver son type de retour réel. Depuis OpenJDK, sa source est :

public final InputStream openStream() lance java.io.IOException { Renvoie openConnection().getInputStream(); }

Le type de retour est évidemment l'objet de InputStream, qui est une classe abstraite. Alors, c'est le type déclaré, quel est le type réel de l'objet renvoyé ? Je suis le retour de openConnection() 方法,该方法返回 URLConnection 类的对象。我还顺着它的源码找到了getInputSteam(). Finalement, j'ai trouvé ce code :

Le flux d'entrée public getInputStream() lance IOException { throw new UnknownServiceException("Le protocole ne prend pas en charge l'entrée"); }

Ma question est la suivante : quel est le type de retour réel de getInputStream() 的实际返回类型是什么,这将是 openStream() ?

Solution de contournement

Voici un exemple utilisant une adresse HTTPS.

Utilisez Débogez le processus et placez un point d'arrêt sur la URL#openStreamméthode.
Et je veux dire la méthode réelle, pas votre appel.

À partir de là, « entrez » dans la méthode openConnection.
Ensuite, « entrez » dans la méthode openConnection(URL).

Cela vous mènera à la classe sun.net.www.protocol.https.Handler.

Procédez à nouveau à la méthode openConnection(URL, Proxy), qui renvoie une nouvelle instance de sun.net.www.protocol.https.HttpsURLConnectionImpl.

En voyageant plus loin, vous constaterez qu'une instance de HttpsURLConnection est renvoyée via la classe sun.net.www.protocol.https.DelegateHttpsURLConnection.

Vous savez, lorsque j'ai commencé à utiliser Java il y a quelques années, j'ai (presque) eu exactement ce problème, sauf que j'étais confus à propos de java.awt.Graphics .

Voir Programmation sur une interface

L'idée est que vous n'avez pas réellement besoin de connaître la classe précise - tout ce qui implémente l'interface peut être échangé vers l'intérieur ou vers l'extérieur. Cela rend le code plus adaptable dans le temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer