Frage zu globalen Konstanten

Luk10

Top Contributor
Grüße,

Ich frage mich wie man am besten globale Konstanten speichert. Beispielsweise möchte ich die Maße meines Frames (extends JFrame) global und konstant speichern, damit auch andere Programmteile die Maße abfragen können.

Ein beispiel meiner bisherigen Lösung dafür:

Java:
public class SimFrame extends JFrame {
	private static final long serialVersionUID = 1L;
	
	
	public enum SimFrameScales {
		
		WIDTH(400),
		HEIGHT(400);
		
		final int size;
		
		private SimFrameScales(int size) {
			
			this.size = size;
			
		}
		
		public int getSize() {
			
			return size;
			
		}
		
	}
}

Mir erscheint es relativ viel Aufwand um nur zwei Konstanten zu speichern. Wie wird das am besten gemacht? Ist es sinnvoll ein (public) enum zu verwenden?

Danke,
-Luk10-
 
Man speichert Konstanten als globale Klassen-Variablen, d.h.:

Java:
public class SimFrame extends JFrame {
    private static final long serialVersionUID = 1L; // das ist eine Konstante, aber nur lokal zur Klasse
    
    public static final int WITDH = 400; // das ist eine globale Konstante
    public static final int HEIGHT = 400;
    
}

Diese wird im statischen Datenbereich abgelegt. Da es sich um eine nicht-veränderbare Konstante handelt, muss du diese nur einem im Programmcode definieren, und da, sie nicht änderbar ist, kann man sie auch nicht jedes mal über den Konstruktor überschreiben. Zugriff von *jeder* Klasse mittels
Code:
SimFrame.WIDTH
und analog für HEIGHT.

Das Problem bei dir ist wahrschnl., dass du das "objektorientiert" lösen willst. Aber eine Konstante ist überall und global gültig, deswegen gibt es da keinen "objektorientierten"-Ansatz.
 
in deinem fall sehe ich keinen sinn in einem enum, es reicht diese beiden Werte als public static final Variable zu definieren
 
Du hast in deinem Beispiel eine globale Konstante drin und fragst dann wie man eine globale Konstante erstellt???

Java:
private static final long serialVersionUID = 1L;
 
Was für eine Funktion haben dann enums im Gegensatz zu konstanten Variablen?

Definieren einer bestimmten Menge an möglichen Konstanten.

bsp. Farben: Blau Grün Gelb Lila. Hier gibt es eine vordefinierte Menge. Bei switch Abfragen kann man so z.B., sichergehen, dass es auf jedenfall nur ein Konstante dieser Menge vorliegt und z.B. nicht Schwarz wählbar wird.
 
wenn deine klasse von JFrame erbt kannst du über [c]this.getSize()[/c] *von java.awt.Component* die größe dierekt abfragen ... sehe also keinen sinn unzuverlässig irgendwo konstante werte einzutragen ... sondern würde eher "live" abfragen
 
wenn deine klasse von JFrame erbt kannst du über [c]this.getSize()[/c] *von java.awt.Component* die größe dierekt abfragen ... sehe also keinen sinn unzuverlässig irgendwo konstante werte einzutragen ... sondern würde eher "live" abfragen

wenn eine andere Komponente des Programmes nur die Groessenangaben braucht, so waere es unsinnig wegen dieser Information den gesamten Frame bereitzustellen (auch nicht als java.awt.Component).

haengt vom Einsatz ab
 
war in etwa mein gedanke bei dem text ...

da TO das beispiel einer java.awt.Component *oder davon abgeleitet* und ihrer größe gebracht hat liese sich jetzt speziell darauf mit [c]getSize()[/c] antworten ...

ansonsten hängt es immer davon ab was es für werte sind , wo diese gebraucht werden , ob sie "von außen" verändert werden können ... ich denke wohl kaum das es für ALLE fälle eine patentlösung geben wird ...
 
Danke für alle Antworten.

Das Beispiel ist stark vereinfacht und es ist sinnvoll die Werte manuell und nicht über getSize zu setzten bzw abzufragen.

-Luk10-
 
Wenn es nur um die Größe geht, dann leg doch eine Dimension an, die du referenzierst.
Die komplette Component zu übergeben wäre da wie schon erwähnt nicht gerade speichereffizient.

Gruß Vanny
 

Zurück
Oben