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 :

[Introspection] Faut-il refermer setAccessible() ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut [Introspection] Faut-il refermer setAccessible() ?
    Quand on veut lire ou modifier une variable membre non publique à partir d'un objet Field, il faut faire : monChamp.setAccessible(true).

    On a l'impression que ça reste ouvert à tous vents... Ne faudrait-il pas faire : monChamp.setAccessible(false) avant de terminer ? Ou bien n'y a-t-il d'effet que sur l'objet Field lui-même ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Et si tu testais justement sur un exemple ce que tu remarques ?
    La réponse deviendra peut être évidente.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut
    Ayant été mis au défi ici-même par le sieur Kossistus de pondre un code de test, j'ai écrit ceci :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import java.lang.reflect.*;
     
    class Fouineuse {
     
    	public static void main(String[] args) {
    		MonEntierSecret monEntierSecret=new MonEntierSecret();
    		int trouvé=jeTeVois(monEntierSecret);
    		System.out.println("Mon secret est : "+trouvé);
    		trouvé=teVoisJe(monEntierSecret);
    		System.out.println("Et rebelote : "+trouvé);
    	}
     
    	static int jeTeVois(Object monEntierSecret) { 
    		Class classe=monEntierSecret.getClass();
    		Field monChamp1=null;
    		try {
    			monChamp1=classe.getDeclaredField("x");
    		} catch(NoSuchFieldException e) {
    			System.out.println(e.getMessage());
    		}
    		monChamp1.setAccessible(true);
    		int vu=0;
    		try {
    			vu=monChamp1.getInt(monEntierSecret);
    		} catch(IllegalArgumentException e) {
    			System.out.println(e.getMessage());
    		} catch(IllegalAccessException e) {
    			System.out.println(e.getMessage());
    		}
    		return vu;
    	}
     
    	static int teVoisJe(Object monEntierSecret) { 
    		Class classe=monEntierSecret.getClass();
    		Field monChamp2=null;
    		try {
    			monChamp2=classe.getDeclaredField("x");
    		} catch(NoSuchFieldException e) {
    			System.out.println(e.getMessage());
    		}
    		int vu=0;
    		try {
    			vu=monChamp2.getInt(monEntierSecret);
    		} catch(IllegalArgumentException e) {
    			System.out.println(e.getMessage());
    		} catch(IllegalAccessException e) {
    			System.out.println(e.getMessage());
    		}
    		return vu;
    	}
    }
     
    class MonEntierSecret {
    	private int x=4; 
    }
    Et la console de répondre :

    Mon secret est : 4
    Class Fouineuse can not access a member of class MonEntierSecret with modifiers "private"
    Et rebelote : 0

    Ça vous semble satisfaisant comme preuve ?

Discussions similaires

  1. Faut t'il se specialiser ?
    Par vedder dans le forum Emploi
    Réponses: 14
    Dernier message: 17/07/2005, 12h54
  2. interface graphique utilisateur, que faut-il utiliser?
    Par Missvan dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/03/2004, 12h18
  3. [download] que me faut-il ??
    Par terziann dans le forum Débuter
    Réponses: 2
    Dernier message: 03/07/2003, 15h58
  4. Réponses: 13
    Dernier message: 11/05/2003, 13h25
  5. Ce qu'il faut sous la main.
    Par ShinMei dans le forum DirectX
    Réponses: 2
    Dernier message: 18/01/2003, 14h12

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