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

Java Discussion :

Conserver une variable statique


Sujet :

Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Conserver une variable statique
    Bonjour,

    Dans une application de gestion de personnel (cas d'école) j'ai une classe Personnel avec un variable entière statique qui permet de générer un identifiant automatiquement:

    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
    public abstract class Personnel {
     
    	private String id;
    	private static int dernierId = 1;
     
    	protected String nom, numTel;
     
    	public Personnel(String nom, String numTel) {
     
    		this.id = "M" + (1000 + dernierId++);
    		this.nom = nom;
    		this.numTel = numTel;
    	}
     
    	public String getId() { return id; }
    }
    Ensuite on a codé une classe générique Conteneur<K, V> qui à une clée K assosie une valeur V. Cette classe est codée avec un arbre, on y a ajouter les méthodes charger(String fichier) et sauvegarder(String fichier) pour enregistrer les données dans un fichier par sérialization.

    Dans notre application fenêtrée ensuite on créer un Conteneur<String, Personnel> que l'on rempli (la clé étant l'id du personnel). On peut alors créer, ajouter, supprimer du personnel dans le conteneur, puis à tout moment sauvegarder ou charger nos personnel (dans un fichier, par sérialization).

    Le problème: Lorsque je démarre mon application, aucun fichier n'est chargé. J'en ouvre alors un que j'ai créé précédemment, il se charge sans soucis, mais je ne peux pas créer de personnel car la variable statique dernierId est initialisée à 1 au démarrage. Donc si je créer un personnel avec new Personnel(nom, tel) je créer un doublon de la clé "M1001" et je ne peux donc pas ajouter à mon Conteneur...

    Comment faire pour restaurer la variable statique au chargement d'un fichier ?

    D'avance merci pour vos idées !

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Tu sauvegardes cette variable dans un fichier, ou tu donnes à tes fichiers sérialisés un nom qui intègre cette variable (ex mon-objet_MA_VARIABLE.ser), ce qui te permet de la retrouver au lancement, en analysant le contenu du répertoire.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Bonjour,

    J'avais pensé à la sérialization mais je ne savais justement pas trop quel nom donner au fichier. Mais cela étant, si un utilisateur de mon application désire donner un fichier de personnel à un autre utilisateur, cela implique qu'il doit également donner le fichier contenant le niveau de l'ID (qui, en plus, devra être mis dans le bon dossier...).
    C'est un peu bancal non ?

    De plus, il va falloir ajouter une méthode setDernierId(int) à la classe Personnel, et je trouve cela bancal également car on va pouvoir paramétrer l'identifiant "automatique" et en appelant cette méthode on va pouvoir faire n'importe quoi (y compris remettre à 0 l'identifiant à tout moment).

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Donc il faut que tu retrouves le dernier ID à partir de l'analyse du nom des fichiers sérialisés lors du lancement.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Ouais donc en gros il n'y pas trop le choix, il faut remettre le dernierId l'ouverture du fichier en lisant les id qui sont en place quoi. Je vais me pencher dessus.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/09/2007, 13h47
  2. Réponses: 5
    Dernier message: 23/11/2006, 14h55
  3. Utilisation d'une variable statique
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/06/2006, 14h49
  4. [VBA-E] Conserver une variable pour plusieurs modules
    Par pilote301152 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/05/2006, 14h14
  5. Formulaire Login/mot de passe - Conserver une variable
    Par GraphiKa dans le forum Access
    Réponses: 3
    Dernier message: 30/09/2005, 16h29

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