[JAVA] Accès attribut à différentes classes

[Résolu/Fermé]
Signaler
-
 Anonyme -
Bonjour,

Je rencontre un problème au niveau de l'accès à un même attribut depuis différentes classes.
Je vous explique : j'ai créé une classe Path qui contient des attributs static correspondant à des noms de fichiers. Depuis une classe classe1 et une classe classe2 situées dans deux .java différents, j'aimerais pouvoir accéder à l'attribut Path contenant le nom de fichier qui m'intéresse, préalablement modifié dans le code de l'une des deux classes.
Par exemple, depuis la classe1 je modifie l'attribut de Path pour qu'il contienne "D:\toto". Si je crée plusieurs instances de Path dans classe1, l'attribut est identique (puisque déclaré en static), mais si j'essaye d'y accéder depuis une instance Path dans classe2, alors je retrouve seulement la valeur par défaut de ma classe et non pas la valeur modifiée dans classe1.
J'ai songé à créer un fichier texte dans lequel j'écrirais les différents noms de fichiers, mais j'aurais préféré passer par une classe (meilleure manipulation de mes noms de fichiers). Est-ce possible où est-ce que je dois recourir à ma deuxième solution ?

Merci !

3 réponses

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Il faudrait voir ton code pour savoir pourquoi ça ne fait pas ce que tu veux, mais lorsque l'on veut passer d'une classe à une autre comme ça, il faut aussi prendre en compte l'encapsulation des attributs.
Dans Path.java :

public class Path
{
private static String directoryPath;

public Path ()
{
directoryPath = "D:\\Documents\\";
}

public String getDirectoryPath ()
{
return directoryPath;
}

public void setDirectoryPath (String s)
{
directoryPath = s;
}
}


Dans classe1.java :

// reste du code

Path p = new Path();
p.setDirectoryPath("D:\\Documents\\toto");


Dans classe2.java :

// Reste du code

Path p = new Path();

System.out.println(p.getDirectoryPath());




Je me rends compte avec du recul que cela vient du fait que j'appelle à nouveau le constructeur de Path et qu'il me remet ma valeur par défaut, mais comment faire autrement ?

Merci.
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Par définition, les valeurs static ne dépendent d'aucun objet, ça n'a donc pas de sens de les initialiser dans des constructeurs, ou d'utiliser un objet pour appeler les méthodes !

public class Path 
{ 
	private static String directoryPath = "D:\\Documents\\";
	
	public static String getDirectoryPath() 
	{ 
		return directoryPath; 
	} 

	public static void setDirectoryPath(String s) 
	{
		directoryPath = s; 
	}
} 

public class Classe1
{
	// ...
	Path.setDirectoryPath("D:\\Documents\\toto");
	// ...
}

public class Classe2
{
	// ...
	System.out.println(Path.getDirectoryPath()); 
	// ...
}
Merci !! J'obtiens le traitement que je voulais en mettant les méthodes en static.