Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1171 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Une bonne grosse variable globale, en Java, y a vraiement pas moyen !?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Une bonne grosse variable globale, en Java, y a vraiement pas moyen !?

n°168841
El_gringo
Posté le 01-07-2002 à 11:53:11  profilanswer
 

bon, comme certains le savent déja, je viens du C/C++ (j'y suis encore pas mal d'ailleurs !)
Si j'étais en C++, j'aurais fait une variable globale, c pas bien y parait, ms j'trouve que si ça se limite à une, voire 2 ds un programme, c pas gênant, et vachement plus simple qd même.
Parce que, là, je vois pas bien comment faire sans trop m'emmerder la vie. Je m'explique.
J'ai écrit une servlet. ds le code de cette servlet, il y a pas mal de chaine de caractères en dur, c pas top. Alors maintenant, je voudrais mettre tout ça dans un fichier properties, et utiliser un ResourceBundle.
Mais ce truc là, je vais quand même pas le mettre en paramètre de toutes les fonctions qui doivent utiliser un libellé !? je vais pas non plus le mettre comme membre de tous les objets qui utilisent un libellé. Donc, quelle est la méthode "commune" pour ce genre de trucs !? j'en fais quoi de mon Bundle moi !?

mood
Publicité
Posté le 01-07-2002 à 11:53:11  profilanswer
 

n°168842
darklord
You're welcome
Posté le 01-07-2002 à 11:54:12  profilanswer
 

un objet statique que tu initialises au début et qui fournit le label sur base d'un id ou autre.


---------------
Just because you feel good does not make you right
n°168850
El_gringo
Posté le 01-07-2002 à 11:55:39  profilanswer
 

heu... tu peux développer un peu ? g jammais utilisé d'objets statiques...

n°168852
darklord
You're welcome
Posté le 01-07-2002 à 11:59:56  profilanswer
 

Code :
  1. public class Resource {
  2.     private static Resource res = new Resource();
  3.     private Resource() {
  4.          // tu fais ce que tu veux lorsque tu crées ton instance unique ici
  5.     }
  6.     public static Resource getResource() {
  7.           return res;
  8.     }
  9.     public void setup() {
  10.        // ici tu initialises ton ressourcebundle en tapant par exemple la correspondance entre id et label dans une hashmap
  11.     }
  12.     public String getLabel(String id) {
  13.           // ici tu regardes dans ta hashmap si il y a un label qui correspond à l'id. Si oui tu le renvoies si non tu peux crée une exception ou renvoyez null... A toi de voir
  14.     }
  15.  
  16. }


 
Ensuite dans ton code là où tu veux le label pour window.title (dans ton fichier properties tu as à un moment donné:
 
windows.title=Le titre de ma fenêtre
 

Code :
  1. Resource r = Resource.getResource();
  2. String title = r.getLabel("window.title" );


 
bien sur il ne faut pas oublie de faire un setup du resource dans ton main (au début  de ton programme)


Message édité par darklord le 01-07-2002 à 14:12:41

---------------
Just because you feel good does not make you right
n°168857
El_gringo
Posté le 01-07-2002 à 12:05:29  profilanswer
 

Excellent, c exactement ce que j'aurais bien voulu faire, je voyais pas comment. Merci encore...
Tu veux pas te mettre au C++ !? histoire que je puisse te rendre l'appareil ! :D

n°168932
darklord
You're welcome
Posté le 01-07-2002 à 14:13:09  profilanswer
 

el_gringo a écrit a écrit :

Excellent, c exactement ce que j'aurais bien voulu faire, je voyais pas comment. Merci encore...
Tu veux pas te mettre au C++ !? histoire que je puisse te rendre l'appareil ! :D




 
 :hello:


---------------
Just because you feel good does not make you right
n°169298
gfive
Posté le 01-07-2002 à 22:34:36  profilanswer
 

Euhhhh...Je suis d'accord avec Dark, sauf dans ton cas : je m'explique : pour les servlets, il faut absolument éviter ce qui est statique pour des valurs qui pourraient être amenées à changer d'une exécution à l'autre : typiquement, un ResourceBundle dans un environnemen,t multilangue (pour l'instant, tu n'as peut êre qu'une langue, mais tu pourrais avoir envie d'internationaliser ton truc) Et là, c'est plus chiant : il vaut beaucoup mieux instancier ton bundle, et le mettre dans la session...Comme ça, il est particuler à la session, et 2 utilisateurs qui veulent des langues différentes peuvent les avoir;...Sinon, ça risque de poser problème.

n°169304
--greg--
Posté le 01-07-2002 à 22:48:07  profilanswer
 

gfive a écrit a écrit :

Euhhhh...Je suis d'accord avec Dark, sauf dans ton cas : je m'explique : pour les servlets, il faut absolument éviter ce qui est statique pour des valurs qui pourraient être amenées à changer d'une exécution à l'autre : typiquement, un ResourceBundle dans un environnemen,t multilangue (pour l'instant, tu n'as peut êre qu'une langue, mais tu pourrais avoir envie d'internationaliser ton truc) Et là, c'est plus chiant : il vaut beaucoup mieux instancier ton bundle, et le mettre dans la session...Comme ça, il est particuler à la session, et 2 utilisateurs qui veulent des langues différentes peuvent les avoir;...Sinon, ça risque de poser problème.




mpoi y'a pas d'accord
une belle classe singleton qui "cache" les resourcebundle pour les langues dont on a besoin et vala
-> pas besoin de les charger à chaque fois
-> instanciés une seule fois dans la jvm
 

n°169313
benou
Posté le 01-07-2002 à 23:07:41  profilanswer
 

juste un truc pour la solution de dark : plutot que de mettre une method setup qu'il faudra appeler (où ??? quand ???), autant utiliser un bloc static :  
 

Code :
  1. public class Resource {
  2.    private static Resource res;
  3.    private Resource() {  ...  }
  4.    public static Resource getResource() { return res;  }
  5.    public String getLabel(String id) { ... }
  6.    // bloc s tatic
  7.    {
  8.       res = new Ressource();
  9.       res.setMachin();
  10.       ...
  11.    }
  12. }


Message édité par benou le 01-07-2002 à 23:08:45
n°169314
--greg--
Posté le 01-07-2002 à 23:09:18  profilanswer
 

benou a écrit a écrit :

juste un truc pour la solution de dark : plutot que de mettre une method setup qu'il faudra appeler (où ??? quand ???), autant utiliser un bloc static :  
 




 
bah ou plus simple
(bon j'ai pas son code sous la main mais...)
style
if (instance==null) {
 instance = new Truc();
 instance.setup()
}
 
mais bon, je sais d'ou il les sors les méthodes ces methodes setup le dark, c'est qu'il est influençable ! (provoc inside)

mood
Publicité
Posté le 01-07-2002 à 23:09:18  profilanswer
 

n°169339
darklord
You're welcome
Posté le 01-07-2002 à 23:43:35  profilanswer
 

je les sors de nul part ;) C'est juste un example que j'ai pondu sans vraiment réfléchir. Effectivement tu peux t'arranger pour que le bloc getResource initialise le singleton (et c'est meme mieux comme ca)
 
La solution de greg est la meilleure à mon avis. Pour peu que resource à tout ce dont il a besoin à disposition (comme ce fameux ressource bundle. Si ce n'est pas le cas tu devrais faire effectivemnt un méthode statup statique qui prendrait en param tout ce dont tu as besoin.


---------------
Just because you feel good does not make you right
n°169398
gfive
Posté le 02-07-2002 à 07:49:04  profilanswer
 

--greg-- a écrit a écrit :

 
mpoi y'a pas d'accord
une belle classe singleton qui "cache" les resourcebundle pour les langues dont on a besoin et vala
-> pas besoin de les charger à chaque fois
-> instanciés une seule fois dans la jvm
 
 




 
J'ai pas dit que j'étais pas d'accoird!!!
Mais dans le cas particulier des Servlets, tu met pas ton ResourceBundle en statique dans ta servlet, sinon, tu t'exposes à des problèmes! Effectivement, la classe Singleton (j'aime pôs ce mot!) est une solution qui marche. Ce que je voulais dire, c'est que avec l'exemple de Dark, i ne faut surtout pas écrire dans une servlet :
 
public static Resource r = new Resource()
...
 
Sinon, tu vas te faire avoir dès que tu passes en multilangue.
 
Et le fait de le mettre dans la session, ça permet aussi de pas le réinstancier à chaque fois, que je sache..

n°169450
El_gringo
Posté le 02-07-2002 à 09:43:49  profilanswer
 

gfive a écrit a écrit :

 
 
J'ai pas dit que j'étais pas d'accoird!!!
Mais dans le cas particulier des Servlets, tu met pas ton ResourceBundle en statique dans ta servlet, sinon, tu t'exposes à des problèmes! Effectivement, la classe Singleton (j'aime pôs ce mot!) est une solution qui marche. Ce que je voulais dire, c'est que avec l'exemple de Dark, i ne faut surtout pas écrire dans une servlet :
 
public static Resource r = new Resource()
...
 
Sinon, tu vas te faire avoir dès que tu passes en multilangue.
 
Et le fait de le mettre dans la session, ça permet aussi de pas le réinstancier à chaque fois, que je sache..




 
Ouais, mais attacher à une Session, ça veut dire que je vais devoir passer mon instance de Ressource comme paramètre de toutes les méthodes qui nécessitent un libellé et qui n'ont pas accès à l'instance d'HttpServletRequest.
ça craint !!!
en plus, ça veut dire une instance par Utilisateur !! c pas la peine.
Je pourrais plutot faire un Singleton (une seule instance static pour ma Servlet), et attacher une String "language" à chaque Session quand je voudrais faire du multi-lingue
ça poserai pb ça !?


Message édité par El_gringo le 02-07-2002 à 09:45:57
n°169497
El_gringo
Posté le 02-07-2002 à 10:14:54  profilanswer
 

alors...?

n°169517
El_gringo
Posté le 02-07-2002 à 10:37:12  profilanswer
 

y a personne aujourd'hui ?

n°169522
darklord
You're welcome
Posté le 02-07-2002 à 10:40:53  profilanswer
 

et oh fait pas ton boolay hein :o


---------------
Just because you feel good does not make you right
n°169528
El_gringo
Posté le 02-07-2002 à 10:44:29  profilanswer
 

DarkLord a écrit a écrit :

et oh fait pas ton boolay hein :o




 
Bah quoi !? t'as pas envie de m'répondre aujourd'hui ?

n°169535
darklord
You're welcome
Posté le 02-07-2002 à 10:50:42  profilanswer
 

tu sais je travaille hein ! Et bon là pour le moment j'ai un gros switch a faire d'intégration en production ... C'est pas HFR qui paye mon loyer :o
 
 :fou:  
 


---------------
Just because you feel good does not make you right
n°169542
El_gringo
Posté le 02-07-2002 à 10:55:45  profilanswer
 

DarkLord a écrit a écrit :

tu sais je travaille hein ! Et bon là pour le moment j'ai un gros switch a faire d'intégration en production ... C'est pas HFR qui paye mon loyer :o
 
 :fou:  




 
...'faut pas s'énerver non plus ! Si t'étais pas sur HFR, t'aurais même pas vu mon message.
c pas moi qui t'ai fait venir non plus. Ms, tant qu'a faire, si t là, j'aurai bien aimé que tu m'donne un de tes fameux coup de pouce.

n°169561
darklord
You're welcome
Posté le 02-07-2002 à 11:08:50  profilanswer
 

non mais je comprends. J'ai du temps pendant que je fais des réplicas de BD ou lorsque j'attends le résultat de certaints tests qui peuvent prendre plusieurs minutes (comme now).
 
Mais bon pour ta question JSP/Servlet c'est plus trop mon truc pour le moment ..


---------------
Just because you feel good does not make you right
n°169572
El_gringo
Posté le 02-07-2002 à 11:14:51  profilanswer
 

DarkLord a écrit a écrit :

non mais je comprends. J'ai du temps pendant que je fais des réplicas de BD ou lorsque j'attends le résultat de certaints tests qui peuvent prendre plusieurs minutes (comme now).
 
Mais bon pour ta question JSP/Servlet c'est plus trop mon truc pour le moment ..




 
Hooo... Darklord qui essaye de faire croire qu'il ignore un truc en Java, allons ! :D
Non, bon, tant pis, de toute façon, sur cette question là, je pense que g raison, je vais faire ce que je dis, j'verrais bien.
Ms c sur ça plutot que je me pose vraiement la question: (en plus c pas lié aux servlets ça, c pour tout truc Java)
http://forum.hardware.fr/forum2.ph [...] ubcat=#bas

n°169574
darklord
You're welcome
Posté le 02-07-2002 à 11:16:57  profilanswer
 

el_gringo a écrit a écrit :

 
 
Hooo... Darklord qui essaye de faire croire qu'il ignore un truc en Java, allons ! :D




 
bien sûr c'est vraiment mon genre ...


---------------
Just because you feel good does not make you right
n°169587
--greg--
Posté le 02-07-2002 à 11:26:45  profilanswer
 

tain j'hallucine je lui donne LA solution et il rale:)

n°169589
--greg--
Posté le 02-07-2002 à 11:28:07  profilanswer
 

gfive a écrit a écrit :

 
[...] Effectivement, la classe Singleton (j'aime pôs ce mot!) est une solution qui marche.[...]



 
tu preferes "celibataire"? :o
et euh ça prete à confusion d'écrire "classe Singleton", du coup on croit que tu parles du nom de la classe.

n°169622
El_gringo
Posté le 02-07-2002 à 11:46:08  profilanswer
 

--greg-- a écrit a écrit :

tain j'hallucine je lui donne LA solution et il rale:)




 
Tu peux aussi me parler à la 2e personne du singulier, c pas mal, essaye pr voir !
G pas râlé. c que GFive a remis ton truc en cause pour le case d'une servlet. Alors du coup, j'essaye de proposer une solution qui permettrait d'adapter TA solution (merveilleuse solution d'ailleur !:D) au cas ou elle est utilisée ds une servlet...

n°169630
--greg--
Posté le 02-07-2002 à 11:49:52  profilanswer
 

el_gringo a écrit a écrit :

 
 
Tu peux aussi me parler à la 2e personne du singulier, c pas mal, essaye pr voir !
G pas râlé. c que GFive a remis ton truc en cause pour le case d'une servlet. Alors du coup, j'essaye de proposer une solution qui permettrait d'adapter TA solution (merveilleuse solution d'ailleur !:D) au cas ou elle est utilisée ds une servlet...



meuh non il l'a pas remis en cause, il a juste expliqué son propre propos(parce que je disais que gt pas d'accord etc), et il a dit que ma solution "marchait"

n°169631
darklord
You're welcome
Posté le 02-07-2002 à 11:50:12  profilanswer
 

:o


---------------
Just because you feel good does not make you right
n°169640
El_gringo
Posté le 02-07-2002 à 11:55:34  profilanswer
 

Bon, ça me saoule, j'arrive pas à faire comprendre ce que je voulais. De toute façon, c'est bon, y a plus de pb...

n°169692
El_gringo
Posté le 02-07-2002 à 12:16:11  profilanswer
 

benou a écrit a écrit :

juste un truc pour la solution de dark : plutot que de mettre une method setup qu'il faudra appeler (où ??? quand ???), autant utiliser un bloc static :  
 

Code :
  1. public class Resource {
  2.    private static Resource res;
  3.    private Resource() {  ...  }
  4.    public static Resource getResource() { return res;  }
  5.    public String getLabel(String id) { ... }
  6.    // bloc s tatic
  7.    {
  8.       res = new Ressource();
  9.       res.setMachin();
  10.       ...
  11.    }
  12. }






 
ha, tient, j'avais pas vu...
c quoi un bloc static ? le bout de code est  exécuté une fois, à la première instanciation de la classe, c ça ?

n°169703
darklord
You're welcome
Posté le 02-07-2002 à 12:22:25  profilanswer
 

ouais tu fais
 
static {
 
   // Tes brols
}
 


---------------
Just because you feel good does not make you right
n°169710
El_gringo
Posté le 02-07-2002 à 12:25:43  profilanswer
 

DarkLord a écrit a écrit :

ouais tu fais
 
static {
 
   // Tes brols
}
 
 




 
c mal vu en POO, non ?
le mot clé "static", il l'avait oublié le benou ?

n°169719
darklord
You're welcome
Posté le 02-07-2002 à 12:31:11  profilanswer
 

très mal meme mais bon il faut etre pragmatique dans la vie et pour le mot clé aucune idée. J'ai jamais vu sans en tout cas.


---------------
Just because you feel good does not make you right
n°169731
MelloW
Posté le 02-07-2002 à 12:53:20  profilanswer
 

Baaah non pas tellement mal... le new peut être considèré comme static... ce qui est mal c'est de violé les principes de parnas (Parnas principles).
Puis le Singleton est surtout utilisé pour contrôler le nombre d'instances d'une classe (regardez le livre de GoF)... pcq les variables globales... c'est môche  :(


---------------
Belgian Connection
n°170111
benou
Posté le 02-07-2002 à 20:03:22  profilanswer
 

el_gringo a écrit a écrit :

 
 
c mal vu en POO, non ?
le mot clé "static", il l'avait oublié le benou ?




ouais. shame on me :(

n°170235
darklord
You're welcome
Posté le 03-07-2002 à 05:35:57  profilanswer
 

MelloW a écrit a écrit :

Baaah non pas tellement mal... le new peut être considèré comme static... ce qui est mal c'est de violé les principes de parnas (Parnas principles).
Puis le Singleton est surtout utilisé pour contrôler le nombre d'instances d'une classe (regardez le livre de GoF)... pcq les variables globales... c'est môche  :(  




 
non mais là on parlait du bloc static dans la classe pas du singleton pattern. Le singleton pattern est tout à fait objet, y a pas de problème à ce niveau là

n°170314
MelloW
Posté le 03-07-2002 à 10:42:37  profilanswer
 

ok, j avais pas bien vu  :sweat:
connaissais même pas les blocs static...


---------------
Belgian Connection
n°170327
El_gringo
Posté le 03-07-2002 à 10:57:06  profilanswer
 

DarkLord a écrit a écrit :

 
 
non mais là on parlait du bloc static dans la classe pas du singleton pattern. Le singleton pattern est tout à fait objet, y a pas de problème à ce niveau là




 
D'ailleur, dans le truc de benou, tu vois un intéret à mettre ce bloc static, plutot que d'initialiser Resources au moment de la construction du singleton ?

n°170332
darklord
You're welcome
Posté le 03-07-2002 à 11:04:18  profilanswer
 

ca dépend. Générallement un constructeur est fait pour créer une instance d'un objet. Le setup est différent. Je veux dire par là que tu peux faire un tas d'opérations complexes et que ca n'a pas sa place dans le constructeur.
 
Mais pour des cas simples tu peux appeller une méthode privée setup() ou écrire directement le code dans le constructeur.
 


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Une bonne grosse variable globale, en Java, y a vraiement pas moyen !?

 

Sujets relatifs
exercices Java !![PHP] Variable qui ne s'affiche pas
Est-ce que qqn arriverait à me stocker cette date dans une variable?evenement + java
[java] parser XML : fichier XML dans un jar ou non....Activer Java dans Netscape 6
[java] Enregistrer un vecteur dans un fichier et le recupérerProblème JAVA avec Oracle
y'a moyen re renommer automatiquement les fichiers uploadés?[Java] Comment effacer la premiere ligne d'un fichier
Plus de sujets relatifs à : Une bonne grosse variable globale, en Java, y a vraiement pas moyen !?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR