View Full Version : [JAVA]Classi con campi statici
danixxx89
30-12-2009, 12:47
Ho un dubbio che mi attanaglia!
Voi come considerate le classi che possiedono solo campi statici, senza nemmeno un costruttore? Possono essere utili oppure sono un inutile spreco di codice?
Ad es. :
public class Mese
{
public static final int GENNAIO = 1;
public static final int FEBBRAIO = 2;
public static final int MARZO = 3;
public static final int APRILE = 4;
public static final int MAGGIO = 5;
public static final int GIUGNO = 6;
public static final int LUGLIO = 7;
public static final int AGOSTO = 8;
public static final int SETTEMBRE = 9;
public static final int OTTOBRE = 10;
public static final int NOVEMBRE = 11;
public static final int DICEMBRE = 12;
}
Dipende il caso, solitamente le classi con soli metodi statici sono quelle che contengono funzioni che fanno determinati operazioni o calcoli, tipo una somma, dove tu passi tutti i parametri ed essa ti restituisce il risultato e basta.
Classi di questo tipo sono un discreto esempio di modularizzazione, perchè tu ti predisponi una classe con metodi che fanno determinate cose e nulla più, ed ovviamente sono facilmente trasportabili da progetto a progetto.
Un esempio è la classe Math, non hai bisogno di crearne un'istanza perchè ha tutti membri static, ed è sempre utile in qualsiasi progetto.
wizard1993
30-12-2009, 14:41
un altro esempio sono le informazioni che possono sevire in svariate parti del codice, ad esempio in un gestionale il nome della ditta può servire in molti luoghi dal titolo della finestra principale del programma in poi. a questo punto diventa interessante un classe che faccia solo da contenitore di informazioni per l'appunto statiche che non cambiano mai.
un altro esempio sono le informazioni che possono sevire in svariate parti del codice, ad esempio in un gestionale il nome della ditta può servire in molti luoghi dal titolo della finestra principale del programma in poi. a questo punto diventa interessante un classe che faccia solo da contenitore di informazioni per l'appunto statiche che non cambiano mai.
Esattamente, concordo.
^TiGeRShArK^
31-12-2009, 16:42
nel caso che hai postato tu è assolutamente sprecata, molto meglio usare le enum:
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html
nel caso che hai postato tu è assolutamente sprecata, molto meglio usare le enum:
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html
parlando in java ... l'esempio non ha nessun dato statico. Sono tutte variabili final di un istanza della classe MESE , e concordo ... scritto in questo modo ha poca utilità.
un altro esempio sono le informazioni che possono sevire in svariate parti del codice, ad esempio in un gestionale il nome della ditta può servire in molti luoghi dal titolo della finestra principale del programma in poi. a questo punto diventa interessante un classe che faccia solo da contenitore di informazioni per l'appunto statiche che non cambiano mai.
direi che in questo caso un file di properties sarebbe molto più addato perchè se devi cambiare qualcosa non devi ricompilare le classi. Il concetto e sbagliato perchè un dato static non è un dato che non cambia mai ma e un dato condiviso da (tutti i thread) tutta l'applicazione.
Giusto per dare un esempio interessante ... nel caso tuo sarebbe più opportuno creare una classe "di sola lettura" e definire static l'istanza della classe java.util.Properties.
import java.util.Properties;
enum NomeProprieta {
TITOLO ("titolo.applicazione"),
FORMATO_DATA ("formato.data");
private String key;
public NomeProprieta (String key){
this.key = key;
}
public String getKey(){
return key;
}
}
class Pippo{
private static Properties properties;
static {
// inizializza la variabile properties in modo apropriato la prima
// volta che la classe viene chiamata in modo statico
properties = new Properties();
properties.load(new FileInputStream(new File("info.properties")));
}
public static getProperty(NomeProprieta nomeProprieta){
return properties.getProperty(nomeProprieta.getKey());
}
}
danixxx89
02-01-2010, 15:50
grazie a tutti per le risposte rapide e precise :)
nuovoUtente86
03-01-2010, 15:33
parlando in java ... l'esempio non ha nessun dato statico. Sono tutte variabili final di un istanza della classe MESE , e concordo ... scritto in questo modo ha poca utilità.sicuramente è codice con poco senso, ma tecnicamente sono campi statici condivisi da tutte le istanze della classe MESE.
Il concetto e sbagliato perchè un dato static non è un dato che non cambia mai ma e un dato condiviso da (tutti i thread) tutta l'applicazione.
vero, il concetto di static non è affine ad immutabile,ma non è per definizione neppure affine ai thread. Un campo static è condiviso tra tutte le istanze di una stessa classe, che poi l' utilizzo di static sia utile a condividere dati tra thread è un altro discorso ma non è peculiare della keyword.
sicuramente è codice con poco senso, ma tecnicamente sono campi statici condivisi da tutte le istanze della classe MESE.
.
ehm ... arrivi tardi ... quando io ho postato la parola chiave "static" in quel esempio nn c'era.:spam:
nuovoUtente86
03-01-2010, 18:20
ehm ... arrivi tardi ... quando io ho postato la parola chiave "static" in quel esempio nn c'era.:spam:
problema tuo che non hai corretto.
danixxx89
04-01-2010, 12:27
ehm ... arrivi tardi ... quando io ho postato la parola chiave "static" in quel esempio nn c'era.:spam:
scusa vladix... mea culpa :Prrr:
avevo dimenticato di inserire nell'esempio la keyword "static" e poi quando l'ho inserita ho dimenticato di avvisare... che capa :doh: :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.