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 :

Conversion String to Object


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut Field.set générique ?
    Hello,

    Je voudrais faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Field[] f = xxx.getDeclaredFields();
    ...
    for(int i=0;i<f.length;i++){
       f[i].set(this,(Object)value);
    Mais que ça fonctionne pour nimporte quel type de variable, car pour l'instant ça ne fonctionneque pour les strings. Il faudrait que ce soit totalement générique, donc que ca fonctionne autant bien si ma variable est un int, String, float, mais aussi array, ....

    Comment faire??

    Merci d'avance!!

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Cela fonctionne déjà pour tous les types ! Il n'y a que les types primitifs qu'il faut convertir dans le type wrapper associé (int -> Integer, etc...). A noter que c'est automatique avec l'autoboxing de Java 5...


    a++

  3. #3
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Ben il me semblais aussi, mais ca me fait une exception!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.lang.IllegalArgumentException: Can not set java.lang.Integer field Config01.val1 to java.lang.String
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
        at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
        at java.lang.reflect.Field.set(Unknown Source)
        at Config01.<init>(Config01.java:25)
        at Test.main(Test.java:7)
    Ca vient de quoi?

  4. #4
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Ton problème vient du fait que tu affectes un String à un attribut de type Integer ce qui ne peux pas marcher, c'est comme si tu essayais de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer test = new String("test");
    Il faut donc que ta variable "value" soit du bon type avant l'affectation.

    A+
    Hydraland

  5. #5
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut Créer un type
    Hello,

    J'ai un tab de fields:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Field[] f = xxx.getDeclaredFields();
    Ensuite, je parcours tous ses fields
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0;i<f.length;i++){
    Et je voudrais pouvoir faire un f[i].set générique pour n'importe quel type. Je voudrais donc faire qqch du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f[i].set(this,(f[i].getType())value);
    Quel que soit le type de value... Mais il n'est pas d'accord!! Comment faire pour spécifier le type à setter?

    Merci d'avance.

    A+

  6. #6
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Quand tu dis qu'il n'est pas d'accord, quelle est l'erreur précise ?

  7. #7
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     f[i].set(this,(f[i].getType())value);
    Eclipse me souligne "prop" et "get" en rouge et me met:
    Pour prop: Syntax error on token "prop", delete this token
    Pour get: The method get(String) is undefined for the type Class<capture-of ?>

    Merci

    A+

    Patrick

  8. #8
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Citation Envoyé par ploxien
    Sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     f[i].set(this,(f[i].getType())value);
    Eclipse me souligne "prop" et "get" en rouge et me met:
    Pour prop: Syntax error on token "prop", delete this token
    Pour get: The method get(String) is undefined for the type Class<capture-of ?>

    Merci

    A+

    Patrick
    euh, dans ton message je ne vois ni 'get' ni 'prop' !

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Euh, tu essaies de faire un drôle de cast...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f[i].set(this,(f[i].getType()) value);
    [I]f.getType() est interprété comme une variable, pas comme un type...
    Tu ne peux absolument pas procéder de la sorte.


    euh, dans ton message je ne vois ni 'get' ni 'prop' !
    LoL, +1

  10. #10
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Peut etre que si tu exposais mieux ton probleme on pourrait t'aider voir te donner des pistes car la j'avoue etre un peu dans le flou ...
    Pour info toutes les classes de java sont Object, pour faire quelque chose de generique , en general on s'appuie sur ca .

  11. #11
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut Properties.get retourne un String
    Hello,

    Je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import java.util.Properties;
    ...
    Properties prop = new Properties();
    FileInputStream fis = new FileInputStream("xml/config.xml");
    prop.loadFromXML(fis);
    Ensuite je prend un element:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String nom = "xxx";
    Object o = prop.get(nom);
    Mais le problème c'est que le get ne me retourne pas un Object mais un String. Moi je voudrais un object pour pouvoir le mettre dans un entier, ... n'importe quoi!! Que je puisse mettre le résultat dans n'importe quoi comme variable!!

    Comment faire??

    Merci

  12. #12
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Pourquoi ne pas transformer ton objet String en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int i = Integer.parseInt( String );

  13. #13
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Car entier, c'est un exemple... Ca peut tout aussi bien être un flaot, un array, ... n'impote quoi!

    Merci

    Patrick

  14. #14
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Dans ton cas, il faut que tu bosses un peu . Tu peux par exemple avoir des valeurs de propriété qui contiennent le type de la propriété et sa vrai valeur(type:valeur). En fonction du type tu fais un code qui instancie le bon type d'objet avec la valeur contenue dans la propriété.

    A+
    Hydraland

  15. #15
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2003
    Messages : 79
    Par défaut
    Un properties ne contient que des couples key/value au format String. Il ne te renseigne pas sur le type (entier, reel, chaîne de caractères, etc). A toi de caster les données dans le type que tu veux. Mais pour lire un fichier XML, un parser serait peut etre plus adapté.

  16. #16
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Il faudrait regarder java.util.prefs.AbstractPreferences pour une implémentation de get/put du bon type sur des properties.

    Attention ! Ne pas étendre AbstractPreferences si ce ne sont pas des Preferences que tu veux utiliser.

  17. #17
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Quand à stocker directement des objets, moi j'utiliserais la sérialisation de manière classique ( ObjectOutputStream et ObjectInputStream )...

  18. #18
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut Conversion String to Object
    Hello,

    J'ai une String et je voudrais la convertir en Object... J'ai pas mal cherché mais je n'y arrive pas...

    Comment faire?

    Merci d'avance.

    A+

  19. #19
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String str = "ma chaine";
    Object obj = str;
    a++

  20. #20
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Mais... suis pas sur...

    Si, après, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(obj.getClass());
    Ca te met: class java.lang.String

    Ou c'est moi qui comprend rien??

    A+

Discussions similaires

  1. conversion de type Object -> String
    Par wiss20000 dans le forum Langage
    Réponses: 3
    Dernier message: 11/04/2007, 00h15
  2. [Conversion] String en InputStream
    Par canou94 dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2005, 15h04
  3. [CONVERSION] String -> HEXADECIMAL ...
    Par tripop dans le forum Langage
    Réponses: 9
    Dernier message: 13/01/2005, 09h42
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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