costanti in java

127 views
Skip to first unread message

Cristiano Tomasi

unread,
May 24, 2012, 2:43:05 PM5/24/12
to jug...@googlegroups.com
ciao a tutti

vorrei definire una lista di costanti visibili in tutta la mia applicazione, quindi ho definito una classe fatta cosi:

public final class GlobalConst {
   public static final String cnstNewCardsPerDay="NewCardsPerDay";
   public static final String cnstNewCardsFirst="NewCardsFirst";
   public static final String cnstOpenLastDeck="OpenLastDeck";
   public static final String cnstLastOpenedDeck="LastOpenedDeck";
   public static final String cnstTotalCards="Cards total";
   public static final String cnstNewCards="New cards";
   public static final String cnstSelectedCards="Selected cards";
   public static final String cnstCardsToReview="Cards to review";
   public static final String cnstJDBCUrl="JDBCUrl";
}

quando utilizzo una di queste costanti però anche se sono nello stesso package devo referenziarle cosi:

GlobalConst.cnstNewCardsPerDay

che rende il tutto un po' prolisso, se però referenzio la costante cosi:

cnstNewCardsPerDay

non la riconosce.
Sto sbagliando qualcosa, o non e' proprio possibile fare diversamente?

saluti
Cris.



alex

unread,
May 24, 2012, 2:54:00 PM5/24/12
to jug...@googlegroups.com
import static mypackage.GlobalConst.* 

io però non metterei tutti in un'unica classe.

Cristiano Tomasi

unread,
May 24, 2012, 3:15:33 PM5/24/12
to jug...@googlegroups.com
Grazie Alex

2012/5/24 alex <al...@cloudware.it>

import static mypackage.GlobalConst.* 

io però non metterei tutti in un'unica classe.

perchè no? hai qualche suggerimento?

bye
Cris.

--
You received this message because you are subscribed to the Google Groups "JUG Trentino Alto Adige Suedtirol" group.
To view this discussion on the web visit https://groups.google.com/d/msg/jugtaa/-/Pn6SXBhmQrkJ.
To post to this group, send email to jug...@googlegroups.com.
To unsubscribe from this group, send email to jugtaa+un...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/jugtaa?hl=en.

Michele Lorenzini

unread,
May 24, 2012, 4:58:20 PM5/24/12
to jug...@googlegroups.com

Puoi definire le costanti in un'interfaccia e implementare quella nelle classi dove ti servono. Automaticamente le costanti saranno visibili. Inoltre nell'interfaccia puoi omettere il public final static visto che tutti gli attributi di interfaccia lo sono di default. Bye

--
You received this message because you are subscribed to the Google Groups "JUG Trentino Alto Adige Suedtirol" group.

Vítor Estêvão Silva Souza

unread,
May 25, 2012, 2:53:09 AM5/25/12
to jug...@googlegroups.com
Ciao Cristiano,

Mi sembra che alcune di queste costanti servano per tenere messaggi per l'interfaccia con l'utente (es.: "New cards", "Cards total", ecc.). Se è questo il caso, ti consiglio di usare le tecniche di internationalization (i18n):


Gli esempi di MessageFormat sono anche utili se lo fai:


Altrimenti io seguirei i consigli di Alex: mettere ogni costanti nella classe a cui c'entra di più e usare import static.

Ciao,
- Vítor


2012/5/24 Cristiano Tomasi <ctom...@gmail.com>

Cristiano Tomasi

unread,
May 25, 2012, 3:27:50 AM5/25/12
to jug...@googlegroups.com
Ciao Vitor

grazie dei suggerimenti, in effetti dovrò pensare anche all'internationalization.

bye
Cris.


2012/5/25 Vítor Estêvão Silva Souza <vitor...@gmail.com>

Cristiano Tomasi

unread,
May 25, 2012, 4:53:22 AM5/25/12
to jug...@googlegroups.com
Pero' non capisco perchè l'idea di avare un classe con tutte le costanti comuni all'intera applicazione vi dia cosi fastidio?
se per esempio devo definire un colore da usare in tutti i jFrame perchè non dovrei definirlo in una classe separata?
ovviamente non ci vanno TUTTE le costanti ma solo quelle che potrei usare ovunque nel codice. Poi nel mio caso specifico ho talemte poche costanti che fa davvero poca differenza.

bye
Cris.


2012/5/25 Cristiano Tomasi <ctom...@gmail.com>

Mario Passamani

unread,
May 25, 2012, 5:01:28 AM5/25/12
to jug...@googlegroups.com
Perchè sarebbe equivalente a mettere tutte le costanti in un file
properties esterno, che carichi all'avvio, col vantaggio che il file
properties (o XML) puoi modificarlo senza ricompilare l'applicazione -
che è alla base dell'approccio suggerito da Vitor per l'I18N.

Questa è la prima motivazione che mi è venuta in mente, altri ne
avranno sicuramente altre.
I watched the stars fall silent from your eyes.

Michele Lorenzini

unread,
May 25, 2012, 5:03:27 AM5/25/12
to jug...@googlegroups.com
2012/5/25 Cristiano Tomasi <ctom...@gmail.com>

Pero' non capisco perchè l'idea di avare un classe con tutte le costanti comuni all'intera applicazione vi dia cosi fastidio?
se per esempio devo definire un colore da usare in tutti i jFrame perchè non dovrei definirlo in una classe separata?
ovviamente non ci vanno TUTTE le costanti ma solo quelle che potrei usare ovunque nel codice. Poi nel mio caso specifico ho talemte poche costanti che fa davvero poca differenza.

Infatti va bene, secondo me, dipende sempre da dove ti servono.
Esternalizzare delle costanti che usi in una sola classe non ha molto senso, farlo per quelle che usi in N classi risulta più comodo (a meno che ovviamente non siano tutte classi riconducibili ad una singola gerarchia per cui le puoi definire sopra).

L'uso delle interfacce come ho scritto ieri può essere un modo, anche se pare che non sia una pratica molto corretta (ma io sono ormai un ooold javista :-), in quanto di fatto un'interfaccia dovrebbe descrivere un insieme di metodi, più che dei dati:

qui suggeriscono piuttosto l'uso di static import:

per cui le costanti comuni le definisci comunque in una classe (non interfaccia) a parte ma ne importi l'uso nella tua classe senza la necessità di dover specificare tutte le volte il nome della classe..

Rileggendo la tua definizione credo che possa fare al caso tuo:

import static GlobalConst.*;

PS: occhio che nel tuo esempio non stai usando le naming convention standard di Java: le costanti (final static) devono essere scritte con i nomi tutti in maiuscolo, per es:

public final class GlobalConst {
   public static final String NEW_CARDS_PER_DAY = "NewCardsPerDay";
   public static final String NEW_CARD_FIRST ="NewCardsFirst";
ecc

Bye
M.

Cristiano Tomasi

unread,
May 25, 2012, 5:29:48 AM5/25/12
to jug...@googlegroups.com
opss... hai ragione :P
correggo subito. ;)

bye
Cris.


2012/5/25 Michele Lorenzini <michele....@gmail.com>

--
Reply all
Reply to author
Forward
0 new messages