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 :

Instantiation d'objet generics


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Points : 194
    Points
    194
    Par défaut Instantiation d'objet generics
    Bonjour!
    Je ne sais pas si ce sujet a déjà été traité mais bon.. je me demandais si les generics peuvent être instanciés...

    ce que je veux dire par exemple:
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //interface factory utilisant un type generique
    public interface IEntityFactory<T> {
        public T createEntity( Object pElementToGetValues);
     
     
    }

    une classe utilisant les services de l'interface:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class XmlEntityFactory<T extends AbstractXmlEntity> implements IEntityFactory<T> {
    public T createEntity( Object pElementToGetValues){
    /*Ce que je voudrais faire : Créer un objet de Type T et le retourner
     Il est possible de faire la chose suivante:*/
    T a=null; //N'a pas d'effet autre qu'une NPE :)
    return a;
    }
    }

    Utilisation:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
     
    IEntityFactory<BlogEntry> facto=new XmlEntityFactory<BlogEntry>();
    // apeller cette ligne me retournerait un objet BlogEntry
    BlogEntry entry=facto.createEntity(o);

    J'ai lu le livre java generics mais ca ne semble pas répondre a ma question.....
    Je sais que beaucoup disent que les generics sont mal développés mais j'aimerais tout de même être éclairé sur la question....

    Merci d'avance de vos commentaires ! Et bonne année d'avance!

  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 laurent_m Voir le message
    Je ne sais pas si ce sujet a déjà été traité mais bon.. je me demandais si les generics peuvent être instanciés...
    On ne peut instancié qu'un objet : les Generics ne sont pas un objet mais un concept


    Citation Envoyé par laurent_m Voir le message
    Je sais que beaucoup disent que les generics sont mal développés mais j'aimerais tout de même être éclairé sur la question....
    Les Generics répondent aux contraintes qui leurs ont été posé...
    A lire : Les Generics ne sont pas des Templates comme les autres !



    En fait tu ne peux pas faire cela car tu ignores le type réel qui sera utilisé... puisqu'il ne sera connu qu'à l'exécution ! (et encore ce pourrait être un type fils...).

    Tu dois donc récupérer ce type quelque part, par exemple en le demandant lors de la construction de ta fabrique :
    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
    public class XmlEntityFactory<T extends AbstractXmlEntity> implements IEntityFactory<T> {
     
    	private final Class<T> type;
     
    	public XmlEntityFactory(Class<T> type) {
    		this.type = type;
    		if (this.type==null) 
    			throw new NullPointerException();
    	}
     
    	private T newInstance() {
    		try {
    			return this.type.newInstance();
    		} catch (Exception e) {
    			throw new IllegalStateException(this.type + " is not instantiable.");
    		}
    	}
     
    	public T createEntity(Object pElementToGetValues) {
    		T a = newInstance();
    		return a;
    	}
    }

    a++

  3. #3
    Membre habitué
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Points : 194
    Points
    194
    Par défaut
    Merci pour les infos!

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Peut-on instancier une classe TT est un paramètre générique

    On ne peut instancié qu'un objet : les Generics ne sont pas un objet mais un concept
    On ne peut pas instancier un objet (c'est déjà une instance).
    Ce qu'on peut instancier c'est un type-classe.
    Si un paramètre générique est un type-classe alors on devrait pouvoir l'instancier.
    Si on ne le peut pas c'est tout simplement une limitation de Java.

    En fait tu ne peux pas faire cela car tu ignores le type réel qui sera utilisé... puisqu'il ne sera connu qu'à l'exécution !
    Le paramètre générique est un type, il est donc connu à la compilation.

    J'ai déjà donné mon point de vue à ce sujet, sur le forum Delphi, car apparemment Delphi 2009 offrira cette possibilité.

    La généricité existe depuis longtemps en Eiffel par exemple, pour citer un langage conceptuellement proche de Java.
    L'expérience de la généricité en Eiffel a montré le besoin d'instancier les paramètres génériques, pour réaliser des fabriques génériques.

    On peut dire que:
    • c'est possible en Eiffel et en Delphi 2009
    • de prime abord ça ne paraît pas très utile, cependant cette impression disparaît une fois que l'on utilise les génériques de façon beaucoup plus systématique

  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
    Citation Envoyé par SpiceGuid Voir le message
    Si on ne le peut pas c'est tout simplement une limitation de Java.
    Citation Envoyé par adiGuba Voir le message
    Les Generics répondent aux contraintes qui leurs ont été posé...
    C'est une limitation imposé par les contraintes soumises aux Generics.

    Afin de pouvoir instancier le type Generics il faudrait le conserver à l'exécution et dans le type même correspondant de la classe, ce qui aurait impliquer pas mal d'incompatibilité, qui aurait empêché d'utiliser les Generics sur les classes existantes (il aurait fallu les dupliquer).


    a++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/06/2015, 10h40
  2. Problème d'instantiation d'objets ?
    Par ddos12 dans le forum Général Python
    Réponses: 3
    Dernier message: 07/07/2010, 19h17
  3. instantiation des objets réferencés
    Par elfive dans le forum PL/SQL
    Réponses: 10
    Dernier message: 02/06/2009, 19h11
  4. Instantiation d'objets et stockage dans un vector
    Par webby238 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 16/04/2007, 23h16
  5. [generics] instantier un objet
    Par Bobo59 dans le forum Langage
    Réponses: 1
    Dernier message: 04/11/2005, 10h47

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