Salut! je voulais savoir s'il y a une méthode pour accéder à des attributs privés d'une Classe à partir d'une autre (qui à le droit d'accédé coté conception) sans changer le Private en Public ?
Salut! je voulais savoir s'il y a une méthode pour accéder à des attributs privés d'une Classe à partir d'une autre (qui à le droit d'accédé coté conception) sans changer le Private en Public ?
Bonjour,
normalement si l'attribut est private, c'est précisément pour interdire à une autre classe d'y accéder directement. En général une classe qui veut mettre à disposition ses attributs le fera via des getters/setters, ce qui lui permet de garder un peu de contrôle sur la vie de la variable:
Si ton champ est private et que tu dois y accéder directement, c'est qu'il y a un problème de conception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //le champ toto est private private String toto; //La méthode getToto renvoie la valeur de toto et est publique public String getToto(){ return toto; }
Ca c'était la version politiquement correcte.
Maintenant la version mains dans le cambouis. Je précise pour ma conscience que si tu dois faire ça dans une véritable application c'est très probablement une mauvaise idée puisqu'en utilisant l'api REFLECT tu fais sauter tous les mécanismes du langage java qui permettent d'assurer un code robuste et maintenable:
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 import java.io.IOException; import java.lang.reflect.Field; import java.text.ParseException; public class Test { public static void main(String[] args) throws IOException, ParseException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ TestBis t = new TestBis(); Field f = TestBis.class.getDeclaredField("str"); //Récupère la définition du champ str f.setAccessible(true); // Fait sauter la protection du champ String value = (String) f.get(t); //Récupère la valeur du champ str pour l'instance t System.out.println(value); } } class TestBis{ private String str = "yop"; }
Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager