IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Etendre la classe HttpURLConnection


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Par défaut Etendre la classe HttpURLConnection
    Bonjour à tous,

    j'ai créé une classe intitulée "MyHttpURLConnection" dont voici le code (je n'ai pas affiché les méthodes abstraites héritées) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyHttpURLConnection extends HttpURLConnection {
     
    	protected MyHttpURLConnection(URL url) {
    		super(url);
    	}
    }

    Dans mon main, je souhaite instancier ma classe MyHttpURLConnection de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyHttpURLConnection connection = (MyHttpURLConnection) url.openConnection();
    Malheureusement, j'obtiens une ClassCastException avec ce message : "sun.net.www.protocol.http.HttpURLConnection cannot be cast to MyHttpURLConnection"

    Je ne comprends pas pourquoi je ne peux pas caster une HttpURLConnection alors la classe MyHttpURLConnection en est héritée. Si quelqu'un pouvait m'en indiquer les raisons, et éventuellement m'aider à trouver une solution à mon problème, je lui en serai reconnaissant.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Un HttpURLConnection n'est pas un MyHttpURLConnection.
    Par contre, un MyHttpURLConnection est un HttpURLConnection. Voila pourquoi tu ne peux pas caster.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peux typecaster vers les parent uniquement, pas vers les enfant. Dans ton cas, il faut que url.openConnection crée et renvoie un MyHttpURLConnection. Normalement, ca peut se faire en jouant avec le urlstreamhandlerfactory de java et en enregistrant un urlhandler pour un protocol custom (et en utilisant du coup autre chose que http:// dans ton url). C'est assez technique, mais voilà un doc de sun

    http://java.sun.com/developer/online...tocolhandlers/

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Par défaut
    Merci pour vos réponses...

    Ce que je trouve étrange, c'est que la classe HttpURLConnection hérite de la classe URLConnection.

    Or, le code suivant ne génère pas d'erreur de casting ()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HttpURLConnection connection = (HttpURLConnection) url.openConnexion();
    ... sachant, bien sûr, que "url.openConnection()" retourne une URLConnection. Nous sommes pourtant dans le même cas de figure... N'est-ce pas ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    non, la signature de la méthode indique un UrlConnection, ca veux dire que la méthode peut retourner n'importe quoi qui hérite de URLConnection. Donc elle peux retourner un HttpURLConnection. Et quand t'es sur que c'est çà qu'elle retourne, tu fais un type casting pour avoir accès à toutes les méthodes

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur d'études J2EE
    Inscrit en
    Avril 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études J2EE

    Informations forums :
    Inscription : Avril 2009
    Messages : 82
    Par défaut
    Merci pour ces précisions bien utiles. Je crois que je vais revoir un peu toutes ces notions d'héritage et de typecasting.

    Bonne continuation à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Etendre une classe
    Par xian21 dans le forum C#
    Réponses: 2
    Dernier message: 11/11/2008, 12h50
  2. Etendre une class QT
    Par guiyomh dans le forum Débuter
    Réponses: 6
    Dernier message: 24/06/2008, 14h23
  3. Utilisation de getOutputStream() de la classe HttpURLConnection
    Par T`lash dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/11/2007, 12h45
  4. Etendre une classe qui appartient a un package
    Par agent007se dans le forum Langage
    Réponses: 5
    Dernier message: 09/03/2007, 15h25
  5. [heritage] etendre une classe interne en dehors du package
    Par ChristopheH dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2004, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo