final Instanz

usrr

Bekanntes Mitglied
Hallo,

eine Klasse, die verschiedene Daten speichert, wurde als static final Klassenkonstante deklariert. Jetzt ist aber nur die Instanzvariable final und die gespeicherten Werte lassen sich munter ändern. Wie bekommt man es hin, dass alle enthaltenen Daten auch final sind?

Java:
public class Test {

  public static final CONST = new Test(1,2);

  int a;
  int b;

  public Test(pa,pb) {
    a=pa;
    b=pb;
  }

  public change() {
    Test test = CONST;

    test.a = 999;
    test.b = 999;
  }
}
 
G

Gonzo17

Gast
Generell indem man jede Variable auch
Code:
final
deklariert.

Was ich aber sehr verwirrend finde ist das Konstrukt mit
Code:
CONST
und der Methode
Code:
change()
. Die Methode
Code:
change()
ist NICHT statisch, deswegen erwartet man, dass sich auch etwas ändert, wenn man diese Methode aufruft.

Java:
Test instance = new Test(1,2);
instance.change(); // Die Werte für a und b bleiben für instance auf 1 und 2!

Was du *eventuell* machen möchtest ist ein Singleton, schau dir dieses Pattern vielleicht mal an.
 

usrr

Bekanntes Mitglied
Das war jetzt nur im Beispiel ungünstig.

Die Klasse hält Punktkoordinaten und ich dachte es wäre schön eine Konstante für die Punkte (0,0),(1,0) und (0,1) zu haben. Ich mach es jetzt mit static methoden .... giveZeroPoint(), giveXPoint() ...

Dann wird halt immer eine neue Instanz erzeugt.
 
G

Gonzo17

Gast
Dann würde sich eventuell ein Enum anbieten.

Java:
public enum Coordinates {

	ORIGIN(0, 0), POINT1(1, 0);

	double positionX, positionY;

	private Coordinates(double x, double y) {
		positionX = x;
		positionY = y;
	}
}

Wobei ich jetzt generell nicht verstehe wieso man Koordinaten als Konstanten haben möchte? Wenn man eine Klasse
Code:
Coordinates
hat und mit
Code:
new Coordinates(0,0)
den Nullpunkt bekommt, ist das für mich jetzt nicht der riesige Aufwand.
 

usrr

Bekanntes Mitglied
Die Instanzerzeugung soll kostenintensiv sein.


----

Mit dem Enum geht es auch nicht:

Java:
Coordinates test1 = Coordinates.ORIGIN;
		
test1.positionX = 100;

Coordinates test2 = Coordinates.ORIGIN;

// test2.positionX == 100
 
B

bygones

Gast
ganz generell zur Information.

wenn ein Objekt final ist, so ist seine Referenz nicht aenderbar, sein Inhalt schon

Java:
final List<String> list = new ArrayList();
list.add("foo"); // geht
list.remove("foo"); // geht
list = new ArrayList(); // geht nicht

Die Instanzerzeugung soll kostenintensiv sein.
das ist im Normallfall unsinn


Mit dem Enum geht es auch nicht:

Java:
Coordinates test1 = Coordinates.ORIGIN;
		
test1.positionX = 100;

Coordinates test2 = Coordinates.ORIGIN;

// test2.positionX == 100
wenn du oeffentliche variablen hast brauchst du die nicht auch nicht wundern....
 
G

Gonzo17

Gast
Mit dem Enum geht es auch nicht:

Natürlich geht das so nicht. Du müsstest zum Beispiel die Variablen x und y als private deklarieren, hab ich jetzt eben nicht getan. Wenn du aber die Koordinaten ändern willst, dann ist das auch keine Konstante mehr!

Die Instanzerzeugung soll kostenintensiv sein.

Und du willst die Last auf den Anfang schieben? Je nachdem wieviele Konstanten du eben willst wird das nicht so schön, generell find ich aber AngryDevelopers Link nicht schlecht, je nachdem was du machst kannst du auch einfach die Erzeugung von Instanzen reduzieren?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
J final attribute erben Java Basics - Anfänger-Themen 2
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
A final String verrechnen Java Basics - Anfänger-Themen 2
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
A Variablen zum final verändern Java Basics - Anfänger-Themen 4
D Interface Final für Parameter in überschriebenen Methoden? Java Basics - Anfänger-Themen 3
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
R JTextArea final Status ändern Java Basics - Anfänger-Themen 11
F Static final Klasse Java Basics - Anfänger-Themen 0
S Kopierkonstrukter eines Objekts mit final Attributen Java Basics - Anfänger-Themen 6
T Schlüsselworte final Java Basics - Anfänger-Themen 1
M Wann final verwenden? Java Basics - Anfänger-Themen 5
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
R Variablen final String Variable als Attribut veränderbar? Java Basics - Anfänger-Themen 21
W run Methode in Time erzwingt final Java Basics - Anfänger-Themen 3
D Polymorphie final class Java Basics - Anfänger-Themen 2
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
H static final vs. final static Java Basics - Anfänger-Themen 3
A final und extends Java Basics - Anfänger-Themen 14
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
J final variablen Java Basics - Anfänger-Themen 3
P Variablen static final boolean Java Basics - Anfänger-Themen 9
S Interface Final und interface Java Basics - Anfänger-Themen 6
ruutaiokwu final wenn immer möglich verwenden? Java Basics - Anfänger-Themen 30
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
C Error: The final local variable variable cannot be assigned, since it is defined in an enclosing typ Java Basics - Anfänger-Themen 4
T Verständnis von "final" und "static" Java Basics - Anfänger-Themen 6
T In methode Final Objekte übergeben? Java Basics - Anfänger-Themen 9
C final variable Java Basics - Anfänger-Themen 4
G Poi 3.5-Final zum laufen bringen Java Basics - Anfänger-Themen 2
H final/static Vererbung Java Basics - Anfänger-Themen 4
P Can not refer to a non final variable... Java Basics - Anfänger-Themen 3
H Variablen final? Java Basics - Anfänger-Themen 3
T Warum muss diese Variable final deklariert werden? Java Basics - Anfänger-Themen 5
G final Variablen in enhanched-for Java Basics - Anfänger-Themen 2
V Frage zu final und Class bzw. Class.cast Java Basics - Anfänger-Themen 5
G static final Java Basics - Anfänger-Themen 7
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
A final Variablen und der GarbageCollector Java Basics - Anfänger-Themen 2
G OOP - final Java Basics - Anfänger-Themen 2
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
G Sollte man Klassenvariablen als final deklarieren? Java Basics - Anfänger-Themen 3
J Interface: The final field Variablen.N cannot be assigned Java Basics - Anfänger-Themen 2
B privat mit und ohne final Java Basics - Anfänger-Themen 4
B final vor Funktionsparameter? Java Basics - Anfänger-Themen 21
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2
W Fehlermeldung "...needs to be declared final" ! Java Basics - Anfänger-Themen 4
N Wieso final ? Java Basics - Anfänger-Themen 4
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
A Problem mit innerer Klasse/final Java Basics - Anfänger-Themen 2
G Methoden + variablen als final definieren? Java Basics - Anfänger-Themen 3
F enum oder static final boolean? Java Basics - Anfänger-Themen 18
M enum final Methoden Java Basics - Anfänger-Themen 24
S final String Java Basics - Anfänger-Themen 2
N The serializable class.does not declare a static final . Java Basics - Anfänger-Themen 2
T private final String oder final String? Was ist richtig? Java Basics - Anfänger-Themen 4
F public final void getsignature() | anfänger Java Basics - Anfänger-Themen 7
A class does not declare a static final serialVersionUID Java Basics - Anfänger-Themen 13
G wieso muss Textfield final sein? Java Basics - Anfänger-Themen 6
M Cannot refer to a non-final variable Java Basics - Anfänger-Themen 10
A array nach initialisierung final machen? Java Basics - Anfänger-Themen 17
G public static void main(final String[] args) Java Basics - Anfänger-Themen 4
G Warum muss das Textfeld final sein? Java Basics - Anfänger-Themen 2
P final mit Parametern Java Basics - Anfänger-Themen 3
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
I Instanz einer anderen Klasse zurückgeben Java Basics - Anfänger-Themen 34
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
T Auf Instanz einer Liste zugreifen Java Basics - Anfänger-Themen 2
M Neu instanzierte Klasse übernimmt Werte von anderer Instanz Java Basics - Anfänger-Themen 4
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
H Klassen Von Instanzvariablen auf Instanz schließen Java Basics - Anfänger-Themen 21
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S Klassen Instanz anderer Klasse raus geben Java Basics - Anfänger-Themen 1
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
D Instanz einer Subklasse anhand deren Superklasse Java Basics - Anfänger-Themen 5
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben