Bonjour,
comme vous l'aurez compris mon roblème est au niveau de la porté des variables.
Je dois écrire une class qui devrait être utilisée par plusieurs projet, par liaison et non par import.
C'est un peu comme include en php.
Cad, je veux que Couple.java situé : /home/compte1/chemin/vers/MesClassPartagees/Couple.java, soit (RE)utilisée par n'importe autres projet java, situé n'importe où sur mon pc.
J'ai essaie, de l'inclure dans plusieurs projets différents, situé dans des dossiers différents, et ça marche très bien, mais à une condition : "sacrifier la sécurité/portée" des méthodes, en les déclarant forcement en public au lieu de protected, comme je le souhaitais (c'est là le problème que je veux résoudre).
(PS : pour l'inclure, dans eclipse, clique droit sur le nom du projet > Build Path > Link source > parcourir et selectionner le dossier .../MesClassPartagees/)
Voici le scénario du problème :
dans Couple.java j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package MesClassPartagees ; public class Couple { private int x, y ; protected void setX(int x) { this.x = x ; } protected int getX() { return x ; } protected void setY(int y) { this.y = y ; } protected int getY() { return y ; } }
une fois cette class (Couple.java) liée à un projet quelconque situé par exemple dans : /home/compte1/AutreChemin/ ... Appelant1.java
(NB : la class Appelant1.java est donc bien hors du package de Couple.java. )
Pour utiliser la class Couple.java, dans la class Appelant1.java
------------------
----------------
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 ... import MesClassPartagees.* ; // ou import MesClassPartagees.Couple ; public class Appelant1 { private Couple c1 = new Couple() ; public Appelant1() { } protected void test() { c1.setX(2); c1.setY(4); System.out.println("x de c1 = " + c1.getX() + " -- et y de c1 = " + c1.getY()); } public static void main(String[] args) { Appelant1 ap1 = new Appelant1() ; ap1.test(); } }
Mais impossible d'executer car eclipse me signale les erreurs (en rouge) :
erreur : The method setX(int) from the type Couple is not visible
erreur : The method setY(int) from the type Couple is not visible
Il m'a fallut modifier la class Couple.java en rendant les setters et les getters public au lieu de protected.
Voici la nouvelle class Couple.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package MesClassPartagees ; public class Couple { private int x, y ; public void setX(int x) { this.x = x ; } public int getX() { return x ; } public void setY(int y) { this.y = y ; } public int getY() { return y ; } }
Et maintenant que les setters et getters de Couple.java sont public, il n'y a plus d'erreur dans appelant.java, qui s'exécute très bien, en affichant ce ci :
Inclusion de Couple.java réussite mais au prix du sacrifice de la sécurité, puisque n'importe quelle casse pourra désormais lire ou modifier les variables de des objets Couple.x de c1 = 2 -- et y de c1 = 4
C'est là l'origine de ma question : c1 est-il sécurisé ? private Cla c1 = new Cla() -- sachant que setter et getter dans Cla sont public
si l'explication n'est pas très claire, je peux toujours reformuler.
Merci d'avance pour vos réactions.
Partager