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

Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?

Votants
248. Vous ne pouvez pas participer à ce sondage.
  • Pour la proposition 1

    38 15,32%
  • Pour la proposition 2

    50 20,16%
  • Contre

    160 64,52%
Langage Java Discussion :

JDK 7: Proposition 10 : Le même type [Débat]


Sujet :

Langage Java

  1. #61
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    Ce problème de devoir faire un Cast est gonflant.
    Je préfère le "This" au "this" car pour moi le "this" est une instance et pas une classe. "This" correspond plus dans mon esprit à la notion de classe.

  2. #62
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    J'aime l'idee, mais je ne pense pas que ca ferait programmation serieusement plus facile. Et oui, 'This' est meilleur, 'this' est l'instance de la classe, alors 'This' peut etre la classe.

  3. #63
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Moi This ne me dérange plus que this car il s'agit justement pas d'une classe mais d'un mot clé qui indique que la classe retournée varie en fonction de l'héritage.
    Or en java tous les mots clés commencent par une minuscule. Ceci dit je pense que un nouveau mot clé comme selfclass serait plus clair que this qui a déjà une signification assez différente.

  4. #64
    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
    Moi je vois deux sens différents pour This et this


    This retournerais le même type, mais pas forcément l'instance courante, typiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public This clone() {
    		return super.clone();
    	}
     
    	public This get() {
    		return getClass().newInstance();
    	}
    (même si je ne sais pas si c'est évident à vérifier pour le compilateur)



    Tandis que this obligerait à retourner this, donc l'instance courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public this setValue(String value) {
        this.value = value;
        return this; // qui pourrait d'ailleurs être optionnel
    }
    (ce qui permet de faire du chainage proprement)


    a++

  5. #65
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Même si aujourd'hui ce n'est pas idéal, on peut déja "simuler" une covariance automatique sans redefinir les méthodes.

    Pour ca faut passer par la généricité comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    /**
     * Classe Mere utilisant la généricité pour indiquer son "propre" type
     * Afin d'automatiser une "sorte" de covariance
     *
     * @author André Sébastien
     */
    public class ClasseMere<E extends ClasseMere>  {
     
        /** Creates a new instance of ClasseMere */
        public ClasseMere() {
     
            /** Je peu appeller la méthode "mere" sans CAST
             *  De plus l'éditeur (Netbeans) me propose bien la complétion (mais dit type E)
             */
            get().mere();
        }
     
        /** Méthode automatiquement "covariée" en utilisant la généricité... (what a hell ?)
         */
        public E get() {
            return (E)this;
        }
     
        /** Méthode spécifique à ClasseMere
         */    
        public void mere() {
            System.out.println("Méthode d'une classe mère");
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            new ClasseMere();
        }
    }
    Avec une classe fille comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /**
     * Classe fille dérivant de sa classe mére en adaptant la covariance automatiquement a son propre type
     *  - Ne redefinit pas "get()" 
     *
     * @author André Sébastien
     */
    public class ClasseFille extends ClasseMere<ClasseFille> {
     
        /** Creates a new instance of ClasseFille */
        public ClasseFille() {
     
            /** Je peu appeller la méthode "fille" sans CAST
             *  De plus l'éditeur (Netbeans) me propose bien la complétion
             */
            get().fille();
        }
     
        /** Méthode spécifique à ClasseFille
         */
        public void fille() {
            System.out.println("Méthode de la classe fille");
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            new ClasseFille();
        }    
    }
    Je sais que ce n'est pas spécialement idéale mais on peut donc malgrés tout déja formaliser le

    PS: Je suis ni pour ni contre la proposition en soit.
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  6. #66
    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
    Oui... sans que c'est lourd et qu'il faut toujours se trimballer les Generics "inutilement".

    D'ailleurs la classe fille devrait plutôt être déclaré comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class ClasseFille<E> extends ClasseMere<E extends ClasseFille> {
    Afin qu'elle puisse aussi avoir une classe fille...


    a++

  7. #67
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Avec tout ce code overhead, c'est plus facile a projeter les types manuellement maintenant.

  8. #68
    Membre averti
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Points : 444
    Points
    444
    Par défaut
    Je suis plutôt pour. On a ici une explication clair de ce que retourne la méthode.
    Par contre j'utiliserais This avec une majuscule pour l'instance et un mon clef style SameType pour le même type, pour ne pas avoir de confusion.
    Car si on lit un peu vite, This et this ça se ressemble beaucoup et j'imagine la confusion que pourrait en faire un débutant.
    JHelp
    Pour avoir une réponse efficace :
    1) Soyez précis dans vos questions
    2) Choisssez bien votre forum
    3) Consultez la FAQ et la doc avant

  9. #69
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Bonsoir,
    Je suis assez d'accord avec cette proposition :

    pour indiquer que la méthode retournera this :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public this maMethode()... {
    //des choses
    //...
    return this; //optionnel
    }
    et sans majuscule car this est suffisamment explicite. (avec bien sur interdiction public static this methode()...)
    si j'ai bien compris qu'on ne parle que d'instance et non de classe.


    Par contre si on ne parle que de type:
    Si c'est pour avoir la même classe quelque soit l'instance je trouve ça risqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A {
      public A renvoie(){ return new B() };
    }
     
    class B extends A {
    }
     
    class C extends A{
      public C renvoie(){ return (C)super.renvoie() };
    }
    appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C c = new C();
    C c2 = c.renvoie();
    et là ClassCastException de B vers C.

    Peut être je me trompe mais je trouve que c'est plutôt dangereux de vouloir masquer un cast déjà potentiellement dangereux.

    A bientôt.

  10. #70
    Membre régulier

    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 65
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    J'ai voté pour la proposition 1... Mais je sens que cela va être plutôt une source de confusion... Le transtypage permet effectivement un meilleur contrôle de ce que l'on code.

    Cdlt

  11. #71
    Membre régulier
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Points : 87
    Points
    87
    Par défaut
    D'accord avec la première proposition. Elle va dans le même ordre d'idées que l'appel de constructeur this() qui évite avantageusement de répéter le nom de la classe.

  12. #72
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Pour
    La proposition permet d'écrire simplement ce que les types génériques permettent déjà de faire de manière un peu lourde.
    Je suis pour les deux propositions car elles elles pourraient signifier deux choses différentes :

    • This indiquerait que le type de retour doit être le même que celui de la classe qui implémente la méthode
    • this indiquerait carrément que l'objet retourné est la même instance de la classe sur laquelle on a invoqué la méthode


    A mon sens ces deux notions peuvent être utiles; sachant que la deuxième est une vraie nouveauté.

Discussions similaires

  1. rechercher tous les fichiers d'un même type
    Par didierdarras dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/09/2007, 09h43
  2. Réponses: 14
    Dernier message: 13/07/2007, 12h05
  3. Comment attraper tous les noeud d'un même type dans un tableau
    Par lodan dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 01/04/2007, 16h36
  4. 2 objets de même type dans une classe
    Par _R3nO_ dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/02/2007, 16h12
  5. Réponses: 18
    Dernier message: 21/09/2006, 11h54

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