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

avec Java Discussion :

Parseur pour creation de nouveaux objets


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 74
    Points : 40
    Points
    40
    Par défaut Parseur pour creation de nouveaux objets
    Bonjour,

    Il y a t-il un tokenizer qui permettent d'instancier des objets dans l'ordre de leur déclaration en même temps. Par exemple si j'ai jeep, jaune, diesel que je puisse instancier
    suivant la syntaxe Voiture(Couleur, Carburant) : new jeep(new jaune, new diesel).

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    non il n'existe pas de classe toute faite pour résoudre ton cas spécifique.

    mais tu peux la faire assez facilement

    si ta chaine en entrée est bien une liste de paramètres séparées par des virgules

    tu peux la découper en élément par un split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s="jeep, jaune, diesel";
    String[] elements=s.split(",");
    attention les espaces restent dans les elements

    si tu es sur que tu n'auras jamais d'espaces dans tes éléments, tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] elements=s.trim().split("[, ]+"
    ensuite, tu peux considérer que tu obtiens une séquence, du type:

    classe principale + paramètres

    il te faut ensuite convertir les éléments en classe

    soit tu utilises une Map qui va te permettre d'associer chaque élément avec une classe, comme dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Map<String,Class<?>> classMap=new HashMap<String,Class<?>>();
    classMap.put("jeep",Jeep.class);
    classMap.put("jaune",Jaune.class);
    classMap.put("diesel",Diesel.class);
    et pour récupérer la classe en fonction de l'élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class<?> elementClass=classMap.get(element);
    (tu peux aussi faire 3 maps, une pour les voitures, une pour les couleurs, une pour les carburants)

    l'autre moyen est de faire une méthode qui découvre la classe en utilisant son nom, ce qui permet assez facilement d'avoir des classes de voitures avec un nombre de paramètres qui s'adapte à ta chaine en entrée

    par exemple, si tes classes sont dans un package fr.package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Class<?> getClass(String element) throws ClassNotFoundException {
        return Class.forName("fr.package."+Character.toUpperCase(element.charAt(0))+element.substring(1));
    }
    donc maintenant tu peux instancier tes paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Object[] parametres=new Object[elements.length-1];
    Class<?>[] paramClasses=new Class<?>[elements.length-1];
    for(int i=1; i<elements.length;i++) {
        paramClasses[i]=getClass(elements[i]);
        parametres[i]=paramClasses[i].newInstance();
    }
    ensuite il te faut instancier ton objet principal avec tes paramètres : c'est un tout petit peu plus complexe : on va utiliser la réflexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Class<?> classPrincipale = getClass(elements[0]);
    Constructor<?> constructor = classPrincipale.getConstructor(paramClasses);
    objectPrincipal = constructor.newInstance(parametres);
    et voilà objectPrincipal sera une instance de l'objet qui correspond à ta chaine

    bien sûr, je n'ai mis en place aucun traitement d'erreur, si la saisie est incorecte, s'il y a trop ou pas assez de paramètres etc... c'est une base de départ à enrichir

    enfin une dernière chose : si tes paramètres sont des valeurs d'une liste finie, tu peux utiliser aussi les énumérations, comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public enum Carburant {
        diesel,essence,super98,hybrid,electrique
    }
    dans ce cas obtenir la valeur de paramètre correspondant à un élément est beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Carburant carburant =  Carburant.valueOf(element);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 74
    Points : 40
    Points
    40
    Par défaut
    Merci pour cet exposé complet. Ça m'a bien fait avancer dans ma réflexion

Discussions similaires

  1. Creation de type Objets pour projet en JDBC
    Par Nelmech dans le forum Schéma
    Réponses: 2
    Dernier message: 08/04/2013, 17h06
  2. [PPT-2007] Police par défaut pour nouveaux objets
    Par Lufia dans le forum Powerpoint
    Réponses: 5
    Dernier message: 13/05/2011, 09h13
  3. [POO] conseils pour creation site en PHP Objet
    Par Clorish dans le forum Langage
    Réponses: 8
    Dernier message: 05/06/2008, 23h18
  4. Parseur XML to Java pour creation de Class
    Par yannick101 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 14h20
  5. Lancer des shell unix pour creation d'objet ORACLE
    Par sygale dans le forum Administration
    Réponses: 6
    Dernier message: 27/10/2004, 18h03

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