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

Collection et Stream Java Discussion :

Passer un champ à null en utilisant l'introspection


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut Passer un champ à null en utilisant l'introspection
    Bonjour à tous,

    je voulais savoir s'il existait un moyen simple en utilisant l'introspection de passer un champ (java.lang.reflect.Field) à null. En utilisant la methode set de la classe Field, j'ai droit à un illegalArgumentException.

    Merci

  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,

    Généralement les exceptions sont assez instructive sur l'origine de l'erreur...

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Ok, je reformule...

    ayant compris que je ne pouvais utiliser la methode set de Field pour le passer à null, car j'ai bien saisi que cet argument n'etait pas accepté, je cherche à savoir s'il existe un moyen disons "générique" pour passer certains champs de ma classe à null.

  4. #4
    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
    Citation Envoyé par jeanvalery Voir le message
    ayant compris que je ne pouvais utiliser la methode set de Field pour le passer à null, car j'ai bien saisi que cet argument n'etait pas accepté
    Je ne vois nulle part dans la doc que cet argument n'est pas accepté !?


    Je reformule moi aussi : sans code source ni la trace complète de l'exception, personne ne pourra t'aider à trouver l'origine du problème... à moins d'avoir une boule de cristal !

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Bah oui mais lui il me dit ca :
    java.lang.IllegalArgumentException at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)
    at java.lang.reflect.Field.set(Field.java:656)
    pour ce code :

    public static void restoreNullFields(Object object) {

    Field[] fieldTab = object.getClass().getFields();
    String s_tmp = null;

    for (int i = 0; i < fieldTab.length; i++) {
    try {
    Field f = fieldTab[i];
    Object o = f.get(object);
    Class c = f.getType();
    s_tmp = getStringNonNullFromObject(o,c);
    if((c == Long.class && s_tmp.equals(""+LONGNULL))||
    (c == Integer.class && s_tmp.equals(""+INTNULL))||
    (c == String.class && s_tmp.equals(STRINGNULL))||
    (c == Timestamp.class && s_tmp.equals(""+TIMESTAMPNULL))){
    f.set(o,null);

    }
    } catch (IllegalArgumentException e) {
    log.error("Attribution de null à un champ a echoué :: "+e.getClass());
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }

  6. #6
    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
    Bizarre que tu n'ai pas plus de détail sur l'exception (tu utilises quelle version de Java ?)

    Sinon cela plante sur quel champ ? Et comment est-il déclaré ?

    a++

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

Discussions similaires

  1. INSTR sur un champ vide, Detecter un champ null
    Par rodolphedj dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 15h24
  2. passer un champ en paramètre, c'est possible ??
    Par marie253 dans le forum Bases de données
    Réponses: 6
    Dernier message: 09/07/2004, 09h22
  3. Selectionner un champs null
    Par maadadi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2004, 14h08
  4. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52
  5. Alter column => passer de NOT NULL à NULL
    Par JohnGT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2003, 11h16

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