Setzen und erhalten eine statische variable aus zwei verschiedenen Klassen in Java
Können sagen, ich habe 3 Klassen: A
, Data
, und B
Ich übergeben Sie eine variable aus der Klasse A
Sie legt fest, dass die übergebene variable in eine private variable in der Klasse Data
.
Dann in der Klasse B
möchte ich nennen, dass bestimmte Variablen, die geändert wurde.
Also ich weiß
Data data = new Data();
data.getVariable();
Es wird dann null zurückgegeben, da in der Klasse Data
Initialisiere ich die Variablen auf nothing (ex: int v;
), und ich denke, dass die Klasse B
initialisiert wird eine BRANDNEUE Klasse und zurücksetzen der Werte auf die Standardeinstellungen, aber ich weiß nicht, wie dieses Problem zu beheben.
Ich weiß, dass die variable Einstellung richtig, weil in der Klasse A
wenn ich data.getVariable()
wird es drucken Sie die variable, die gesetzt wurde.
Klasse A
:
Data data = new Data();
int d = 1;
data.setVariable(d);
Klasse Data
:
private static int b;
public void setVariable(int s)
{
b = s;
}
public int getVariable()
{
return b;
}
Klasse B
:
Data data = new Data();
private int v;
v = data.getVariable();
System.out.println(v);
Diese wird, drucken Sie 0 anstelle des tatsächlichen Wertes
versucht
extends
?Mein code für alle 3 Klassen ist über 800 Zeilen lang, also hab ich einfach gemacht, was ich derzeit testen... ich weiß nicht, was erweitert hat oder nicht, also wenn Sie könnte besser erklären, und wenn es zu lösen wäre meine Lösung, dann werde ich es versuchen.
Wenn ich das Tue, erweitert die Klasse B, es funktioniert immer noch nicht
Die Klasse B definition würde nicht immer kompilieren. Zeigen Sie den code bitte.
InformationsquelleAutor user1062898 | 2011-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim instanziieren eines
Data
Objekt in Klasse A, und instanziieren Sie ein anderesData
Objekt in Klasse B sind Sie zwei verschiedene Instanzen derData
Klasse. Beide instanziierend
standardmäßig auf 0. Dann rufen SiesetVariable
auf die Instanz in der Klasse A auf und übergeben Ihr den Wert 1 zu; aber die Instanz der Klasse B bleibt 0. Um den Wert der Instanz in der Klasse B, müssen Sie rufensetVariable
auf die Instanz der Klasse B.Was es scheint, Sie suchen, ist ein statisches Element. Statische Elemente sind die gleichen in allen Instanzen von der gleichen Klasse. Legen Sie einfach die
static
Schlüsselwort vor die Methode(N) oder das Feld(s), die Sie verwenden möchten. Statische Elemente und Felder sind in der Regel den Zugriff über den Namen der Klasse in der Sie deklariert wurden (d.h.MyClass.doMethod()
). Zum Beispiel:Klasse Daten (aktualisiert):
Klasse A:
Klasse B:
Sogar putting static vor die Methoden, wird es immer noch geben mir 0.
Okay, ich schien mein problem behoben, wo war ich das deklarieren von Variablen und zuweisen zu können um die Daten zu erhalten.
Während technisch "korrekt" würde ich halte das für schlechtes design.
Ich denke, ich Tat das gleiche. Ich habe eine variable namens
x
eine KlasseSharedUtils
deren default-Wert ist-1
. Ich habeSharedUtils.x = 1
an einem Ort, sondern später, wenn ich den Wert der variable, es zeigt den default-Wert von-1
und nicht der Wert, den ich eingestellt habe. Bin ich hier etwas fehlt?InformationsquelleAutor Jon Newmuis
Bearbeiten - mein Erster Vorschlag war der Einsatz von
static
für variableb
, und der Verfasser änderte seine Frage hinzufügen Vorschlag.Es behebt, was Sie zu tun versuchen. Ich Schreibe das Beispiel in code, der kompiliert:
Ich bin ein bisschen verwirrt. Wie kann es drucken, "null"? es ist eine ganze Zahl
Ok, gut, ich mache ein Beispiel, bei mir ist es ein string aber es spielt keine Rolle, da eh die ganze Zahl wird, drucken Sie 0 anstelle des wahren Wertes, mein schlechtes. So ersetzen Sie einfach null mit 0.
Es zeigt 0, nicht null. 0 ist nicht der richtige Wert egal, es soll angezeigt werden 6. Ich kann nicht drucken Sie den gesamten code, da seinen Weg zu lang.
Nicht sicher, dann schaute ich über das, was ich habe und es ist genau das gleiche. Ich werde weiter suchen, über Euch zu sehen, wenn mir etwas fehlt. Danke für die Hilfe
InformationsquelleAutor Raul Guiu