Une bonne grosse variable globale, en Java, y a vraiement pas moyen !? - Java - Programmation
Marsh Posté le 01-07-2002 à 11:54:12
un objet statique que tu initialises au début et qui fournit le label sur base d'un id ou autre.
Marsh Posté le 01-07-2002 à 11:55:39
heu... tu peux développer un peu ? g jammais utilisé d'objets statiques...
Marsh Posté le 01-07-2002 à 11:59:56
Code :
|
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 :
|
bien sur il ne faut pas oublie de faire un setup du resource dans ton main (au début de ton programme)
Marsh Posté le 01-07-2002 à 12:05:29
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 !
Marsh Posté le 01-07-2002 à 14:13:09
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 ! |
Marsh Posté le 01-07-2002 à 22:34:36
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.
Marsh Posté le 01-07-2002 à 22:48:07
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
Marsh Posté le 01-07-2002 à 23:07:41
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 :
|
Marsh Posté le 01-07-2002 à 23:09:18
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)
Marsh Posté le 01-07-2002 à 23:43:35
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.
Marsh Posté le 02-07-2002 à 07:49:04
--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..
Marsh Posté le 02-07-2002 à 09:43:49
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 !?
Marsh Posté le 02-07-2002 à 10:40:53
et oh fait pas ton boolay hein
Marsh Posté le 02-07-2002 à 10:44:29
DarkLord a écrit a écrit : et oh fait pas ton boolay hein |
Bah quoi !? t'as pas envie de m'répondre aujourd'hui ?
Marsh Posté le 02-07-2002 à 10:50:42
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
Marsh Posté le 02-07-2002 à 10:55:45
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 |
...'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.
Marsh Posté le 02-07-2002 à 11:08:50
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 ..
Marsh Posté le 02-07-2002 à 11:14:51
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 !
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
Marsh Posté le 02-07-2002 à 11:16:57
el_gringo a écrit a écrit : Hooo... Darklord qui essaye de faire croire qu'il ignore un truc en Java, allons ! |
bien sûr c'est vraiment mon genre ...
Marsh Posté le 02-07-2002 à 11:28:07
gfive a écrit a écrit : [...] Effectivement, la classe Singleton (j'aime pôs ce mot!) est une solution qui marche.[...] |
tu preferes "celibataire"?
et euh ça prete à confusion d'écrire "classe Singleton", du coup on croit que tu parles du nom de la classe.
Marsh Posté le 02-07-2002 à 11:46:08
--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...
Marsh Posté le 02-07-2002 à 11:49:52
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"
Marsh Posté le 02-07-2002 à 11:50:12
Marsh Posté le 02-07-2002 à 11:55:34
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...
Marsh Posté le 02-07-2002 à 12:16:11
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 :
|
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 ?
Marsh Posté le 02-07-2002 à 12:22:25
ouais tu fais
static {
// Tes brols
}
Marsh Posté le 02-07-2002 à 12:25:43
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 ?
Marsh Posté le 02-07-2002 à 12:31:11
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.
Marsh Posté le 02-07-2002 à 12:53:20
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
Marsh Posté le 02-07-2002 à 20:03:22
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
Marsh Posté le 03-07-2002 à 05:35:57
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à
Marsh Posté le 03-07-2002 à 10:42:37
ok, j avais pas bien vu
connaissais même pas les blocs static...
Marsh Posté le 03-07-2002 à 10:57:06
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 ?
Marsh Posté le 03-07-2002 à 11:04:18
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.
Marsh Posté le 01-07-2002 à 11:53:11
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 !?