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 :

Utilisation de la classe java.lang.Void


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut Utilisation de la classe java.lang.Void
    Bonjour à tous,

    J'ai un problème de design et je voudrais avoir votre avis.

    J'ai deux classes pour les quelles j'ai besoin de trouver un super type. Mais l'une des méthodes me pose problème. Comme le montre le code ci-dessus, ma méthode retourne soit un Object soit elle ne retourne rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class C1 {
     
       // La méthode retourne un Object
       public Object m() {...}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class C2 {
     
       // La méthode ne retourne rien
       public void m() {...}
     
    }
    Mes recherches m'ont conduit vers la classe java.lang.Void. Je peux alors faire du refectoring et obtenir le résultat suivant:

    - Je définis d'abord mon interface commune à C1 et C2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface I<E> {
     
       public E m(); 
     
    }
    - Puis j'implémente C1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class C1 implements I<Object> {
     
       // La méthode retourne un Object
       public Object m() {...}
     
    }
    - Enfin j'implémente la classe C2 avec le fameux type Void
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class C1 implements I<Void> {
     
       // La méthode ne retourne rien
       public Void m() {
             ...
             return null; // Cette valeur ne sera jamais utilisée.
       }
     
    }
    A première vue, mon objectif est atteint. Mais j'ai l'impression d'être passé à coté du vrai sens de la classe Void.

    - Qu'en pensez-vous? Avez-vous déjà travaillé avec cette classe? Pour quoi faire?
    - Void est-il à void ce que Integer est à int (i.e. un wrapeur)?
    - J'ai l'impression que la seule utilité de Void est dans du code de réflexion. Qu'en pensez-vous?
    - Si ma solution ne fait pas de sens, comment pourrais-je m'y prendre?

    Merci d'avance pour vos réponses et commentaires.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par LGnord Voir le message
    - Qu'en pensez-vous? Avez-vous déjà travaillé avec cette classe? Pour quoi faire?
    Perso je trouve cela tout à fait correct !

    Citation Envoyé par LGnord Voir le message
    - Void est-il à void ce que Integer est à int (i.e. un wrapeur)?
    Oui... si ce n'est que la particularité de void vient du fait qu'on ne peut pas avoir de valeur (on ne peut pas instancier Void).

    Citation Envoyé par LGnord Voir le message
    - J'ai l'impression que la seule utilité de Void est dans du code de réflexion. Qu'en pensez-vous?
    C'est en effet une des principales utilisations...

    Citation Envoyé par LGnord Voir le message
    - Si ma solution ne fait pas de sens, comment pourrais-je m'y prendre?
    Comme je l'ai dit je trouve cela tout à fait correct...


    a++

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Void est une classe utilisée essentiellement lors de la réflexion, afin d'identifier le fait qu'une méthode ne retourne rien.

    Elle ne devrait être utilisée que dans ce contexte.

    Comme expliqué dans la javadoc :
    The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.
    À mon avis, il faudrait tout de même s'assurer du design général et voir si l'utilisation faite ici est dans le contexte.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    L'interface en soit est bien définie. Le problème est que si tu crées une classe concrète avec le type java.lang.Void, tu ne pourras jamais retourner un objet de ce type, et donc la méthode concrète ne pourras rien faire d'autre que retourner null.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ben il ne veut rien retourner, et null est la seul valeur acceptée... donc ce n'est pas vraiment un problème non ?

    a++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Merci beaucoup pour vos réponses.

    J'ai bien compris que la seule valeur que ma méthode peut retourner est null. Mais cela ne me pose pas de problème puisque cette valeur ne m'intéresse pas.

    Voici ce que je conclus de vos commentaires : bien que je n'utilise pas la classe Void dans un contexte qui n'est pas celui de la réflexion, mon interface est bien conçue. Je ne devrais pas aller droit dans le mur.

    Je pense donc que je vais partir sur cette voie.

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

Discussions similaires

  1. Utilisation de la classe java.util.prefs.Preferences
    Par a33608 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/10/2009, 09h27
  2. Utiliser la class java.lang.Thread
    Par adilou1981 dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 29/05/2009, 08h11
  3. Réponses: 8
    Dernier message: 07/08/2007, 17h21
  4. Réponses: 5
    Dernier message: 10/07/2007, 17h20
  5. Réponses: 1
    Dernier message: 01/05/2007, 13h48

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