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 :

Paramétrer le type d'un objet


Sujet :

Langage Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Points : 45
    Points
    45
    Par défaut Paramétrer le type d'un objet
    Bonjour,

    est-ce possible de paramétrer le type d'un objet à partir de la valeur d'un String ? Je m'explique :

    String type = "Valeur";

    Valeur a = new Valeur();

    Evidemment la classe Valeur aura été définie au préalable

    Merci d'avance !!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Class c = Class.forName(...) // Nom complet avec le package


    et

    c.newInstance() // nécessite un constructeur sans argument, sinon il faut chercher le bon constructeur dans la classe et l'appeler.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Points : 45
    Points
    45
    Par défaut
    En effet ça marche !
    Par contre je n'arrive pas à appeler les méthodes de la classe et ça je ne sais pas si c'est possible...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Tu pourrais le faire en utilisant c.getMethod() comme indiqué dans la FAQ sur la reflexivité en Java.

    Mais en principe tu devrais pas avoir besoin de ça. Tu devrais plutôt faire un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class<?> c = Class.forName("ImplementationDeTonInterface");
     
    TonInterface a = (TonInterface)c.newInstance();
    a.taMethode();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Le mieux est de faire une Factory :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class ClassFactory{
     
    public Object createInstanceOf(String className){
    switch(className){
    case 'String':
    return new String();
    default :
    return null;
    }
     
    }
    }
    Car je suppose que tu n'as pas 36 valeurs pour ton String. Sinon, la méthode de Mathieu est pas mal.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Le mieux est de faire une Factory
    ?? Qu'est-ce que cet exemple a de mieux ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Appel qui ne soulève pas d'erreur.

    Si un jour tu dois crée une instance "enfant" à la place de la classe appeler, tu pourra le gérer.

    Mais, si la réalisation du Class.forName() se trouve dans une classe spécifique (Factory) et que celle-ci gère les exceptions potentiels. L'exemple est juste plus simple/simpliste.

    Sinon pour connaitre les méthodes d'une classe :
    http://docs.oracle.com/javase/7/docs...tMethods%28%29
    Et dans la classe Method :
    http://docs.oracle.com/javase/7/docs...g.Object...%29

    Cordialement,
    Patrick Kolodziejcyzk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Appel qui ne soulève pas d'erreur.

    Si un jour tu dois crée une instance "enfant" à la place de la classe appeler, tu pourra le gérer.

    Mais, si la réalisation du Class.forName() se trouve dans une classe spécifique (Factory) et que celle-ci gère les exceptions potentiels. L'exemple est juste plus simple/simpliste.
    ? Pas compris... S'il y a des exceptions potentielles, elles sont là pour une raison. Et même si on veut les faire gérer par une factory, il n'y a pas de raison de s'embêter avec un switch en utilisant autre chose que Class.forName()...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    ? Pas compris... S'il y a des exceptions potentielles, elles sont là pour une raison. Et même si on veut les faire gérer par une factory, il n'y a pas de raison de s'embêter avec un switch en utilisant autre chose que Class.forName()...
    Il y a des exceptions, car c'est une API. On t'informe que cela se passe mal. Après cela est à toi de voir quand et où tu traite cette erreur.

    Je propose juste une solution qui l'introduit pas de gestion d'erreur et qui limite le nombre de classe visé.

    Pour le switch, c'est plus une vision personne du problème. Si tu veux un Objet de la classe Patate, mais que la classe Patate est abstrait, tu peux crée un Objet PatateDefault à la place.

    C'est plus un choix entre générique/custome...
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

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

Discussions similaires

  1. [AJAX] Paramètres de type objet
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2007, 14h03
  2. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05
  3. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06
  4. [POO] Comment connaître le type d'un objet
    Par zizou39 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 09h46
  5. Comment detecter le type d'un objet?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2003, 15h23

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