globale Konstante Variable

Hunk86

Cadet 4th Year
Dabei seit
Feb. 2010
Beiträge
121
Hallo zusammen,

ich hab eine klasse1 als Library die verschiedene Parameter hat, diese sollen von einer anderen Klasse klasse2 deklariert werden. Bisher löse ich dies so das in klasse1 die parameter als global definiert sind.

Also in klasse2

klasse1 k1;
k1.setparameter();
k1.machirgendwas();

dadurch das es sich um parameter handelt würde ich diese gerne konstant machen. Ist dies möglich? Ich will die Parameter nur einmal von klasse2 aus setzen und danach sollen diese nicht mehr verändert werden können.
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
Welche Programmiersprache?
 

Rossie

Captain
Dabei seit
Dez. 2010
Beiträge
4.048
dadurch das es sich um parameter handelt würde ich diese gerne konstant machen. Ist dies möglich?
Widerspricht sich. Entweder etwas ist konstant. Oder etwas kann (möglicherweise einmalig) verändert werden.


Ich will die Parameter nur einmal von klasse2 aus setzen und danach sollen diese nicht mehr verändert werden können.
Vorgehensweise wie bisher auch, nur zusätzlich prüfen, ob die Variablen bereits verändert wurden und je nachdem keine weitere Änderungen mehr erlauben. Je nach Typ der Variablen benötigt man dazu weitere Statevariablen.
 
Zuletzt bearbeitet:

wahli

Vice Admiral
Dabei seit
Feb. 2010
Beiträge
6.375
Mache die betroffenen Parameter privat und setze sie im Konstruktor
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.039
Wenn die Parameter nur 1x gesetzt werden sollen und danach unveränderbar sein sollen, mach sie final. In Java würde man das so lösen:

Code:
class Klasse1 {
  private final typ param1;

  public Klasse1(typ param1) {
    this.param1 = param1;
  }
}

class Klasse2 {
  Klasse1 k1 = new Klasse1(wertFuerParam1);
}
Der Wert MUSS im Konstruktor gesetzt werden.



EDIT: die Idee von wahli ist auch möglich. Dann kann aber nicht ausgeschlossen werden, dass der Wert über eine Funktion oder sonstiges überschrieben werden kann. Allerdings ist das sinnvoll, wenn du den Wert innerhalb von Klasse1 weiter bearbeiten willst.

wahlis Vorschlag sähe in Java so aus:
Code:
class Klasse1 {
  private typ param1;

  public Klasse1(typ param1) {
    this.param1 = param1;
  }
}

class Klasse2 {
  Klasse1 k1 = new Klasse1(wertFuerParam1);
}
 
Zuletzt bearbeitet:

Hunk86

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2010
Beiträge
121
es geht vorallem drum das nix in Klasse1 dies ändern kann.

ALso wird das leider nicht gehen das ich es global konstant definier und eben erst später zum ersten mal deklariere.
Das Problem ist ich hab die parameter noch nicht während ich in klasse2 die klasse1 deklariere. Und im konstruktor wäre diese au von klasse1 änderbar

es handelt sich übrigends um c++

mir ist auch nix eingefallen, aber wär eben eine absicherung gewesen das sich nix ändert so muss ich eben darauf achten.
 
L

lbm1305

Gast
Jeder Datentyp hat einen Defaultwert. Dies kannst Du in den Set-Methoden überprüfen.

Code:
// Pseudocode:
int _inner = 0;
...
public void SetValue(int i) {
   if(_inner == default(int)) {
        _inner = i;
    }
}
EDIT:
Zu langsam gewesen :-/
 
Zuletzt bearbeitet:

DasBoeseLebt

Lieutenant
Dabei seit
Jan. 2010
Beiträge
686
Du kannst dir auch nen Container schreiben, der nur einmaliges eintragen erlaubt.
(Die Eintragungsmethode überschreiben -> if reinbasteln, ob der Key schon enthalten ist -> wenn ja, dann reinschreiben, ansonsten lassen)

Obs hier nötig ist oder sinnvoll, bezweifel ich stark :D
 
Zuletzt bearbeitet:

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Hallo zusammen,

ich hab eine klasse1 als Library die verschiedene Parameter hat, diese sollen von einer anderen Klasse klasse2 deklariert werden. Bisher löse ich dies so das in klasse1 die parameter als global definiert sind.

Also in klasse2

klasse1 k1;
k1.setparameter();
k1.machirgendwas();

dadurch das es sich um parameter handelt würde ich diese gerne konstant machen. Ist dies möglich? Ich will die Parameter nur einmal von klasse2 aus setzen und danach sollen diese nicht mehr verändert werden können.
Für mich klingt benneque's Lösung sehr vernünftig.

In C++ würde das etwa so aussehen:

Code:
class Klasse1
{
public:
	Klasse1( int wert1, double wert2 ) : m_wert1( wert1 ), m_wert2( wert2 )
	{
	}
	
private:
	const int m_wert1;
	const double m_wert2;
};

// Klasse2 muß dann halt an geeigneter Stelle eine Instanz von Klasse2 anlegen und ihr per Konstruktor die
// passenden Argumente übergeben:
Klasse1 instanzVonKlasse1( 5, 3.14 );
 
Top