Gewusst wie: freigeben von Daten zwischen separaten Klassen in Java
Was ist der beste Weg, um Daten zwischen separaten Klassen in Java? Ich habe eine Reihe von Variablen, die von verschiedenen Klassen in separaten Dateien in unterschiedlicher Weise.
Lassen Sie mich versuchen zu veranschaulichen, eine vereinfachte version meines Problems:
Dies war mein code vor:
public class Top_Level_Class(){
int x, y;
//gets user input which changes x, y;
public void main(){
int p, q, r, s;
//compute p, q, r, s
doA(p,q,r);
doB(q,r,s);
}
public void doA(int p, int q, int r){
//do something that requires x,y and p, q, r
}
public void doB(int q, int r, int s){
//does something else that requires x, y and q, r, s
}
}
Nun es sieht wie folgt aus:
public class Top_Level_Class(){
int x, y;
SomeClass1a a = new SomeClass1a();
SomeClass1a b = new SomeClass1b();
//gets user input which changes x, y;
public void main(){
int p, q, r, s;
//compute p, q, r, s
a.doA(p,q,r);
b.doB(q,r,s);
}
public class SomeClass1a() { //in its own separate file
public void doA(int p, int q, int r){
//do something that requires x,y and p, q, r
}
}
public class SomeClass1b() { //in its own separate file
public void doB(int q, int r, int s){
//does something else that requires x, y and q, r, s
}
}
Jedenfalls, sollte ich pass x-und y-jedes mal (wobei x,y sind Variablen gespeichert, die in der helper-Klasse func) ?
a.set(x,y);
a.doA(p,q,r);
Meine Idee war es, ein Spezial-container-Klasse, wo die x-und y-gehalten werden. Die top-level-Klasse eine Instanz der Klasse container und ändern Sie x,y mit der set-Methoden.
//in the top level class:
Container c = new Container(x,y);
a.setContainer(c);
b.setContainer(c);
Meine helper-Klassen haben auch eine Instanz des Containers und es würde auf das gleiche Instanz wie in der oberen Ebene. So haben Sie Zugriff auf die gleichen x,y, wie in der oberen Ebene.
Ich würde gerne wissen, ob ich sollte
- Verwendung der container-Klasse
- Laden x,y jedes mal in die Unterklassen
- ?? Einige bessere Methode ??
- Hier ist die Antwort, leider, es 'hängt'. Programmierer.se könnte ein fruchtbares Ziel für diese Frage.
- Wenn die innere Klasse nicht statisch ist, dann kann es Zugriff auf übergeordnete Klasse Mitglieder sowie...
- Es ist nicht eine innere Klasse, wenn es in einer anderen Datei. Und es ist nicht eine Unterklasse, wenn es verlängert nicht die Oberklasse.
- Ja, Unterklasse war eine schlechte Wortwahl meinerseits. Ich werde dieses Bearbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die Antwort auf Ihre Frage ist die Design Pattern-namens Singleton.
Im Grunde können Sie bekommen und nutzt das gleiche (und einzige) Instanz einer Klasse, Wann immer Sie wollen in Ihrem system.
Dies ist seine Umsetzung (bitte verzeihen Sie mögliche Syntaxfehler, habe ich nicht kompilieren):
dann, wenn an anderer Stelle in Ihrem code, den Sie importieren die Container können Sie zum Beispiel schreiben
und Sie Einfluss auf die Attribute des einzigartigen container-Instanz, die Sie in Ihrem system
In vielen Fällen ist es jedoch besser, das Dependency Injection-pattern, wie es verringert die Kopplung zwischen verschiedenen Komponenten.
instance != null
statt!instance
, weil die!
ist nicht definiert für dieses argument-Typ.Ich habe eine harte Zeit zu sehen, was dein problem ist-warum wollen Sie nicht-pass-x, ein y als parameter?
Oh, gut. Sofern Sie noch keinen, ich sehe keine Notwendigkeit für eine neue container-Klasse. Tun es auf diese Weise:
Natürlich müssen Sie den öffentlichen getter-Methoden getX() und getY (), um Top_Level_Class.
Wenn Sie nicht möchten, SubClass1a abhängig Top_Level_Class dann könnten Sie eine Schnittstelle erstellen, die den Zugriff auf die Variablen.
Wenn dies der Fall ist, dann sind Sie besser dran, abstrahieren die Variablen aus einer container-Klasse. Wenn jede Instanz dieser nicht-mehr-abhängig-Klassen verwenden wird, eine große Teilmenge dieser Variablen dann macht es Sinn, Sie alle in einer Instanz. Variablen, dass ein logischer Zusammenhang gefunden werden sollte an der gleichen Stelle. Ihr Ansatz sollte so etwas wie:
Dies hält Sie aus immer in eine variable übergeben von spaghetti-code situation, und wenn Sie möchten, verwenden Sie nur ein oder zwei Klassen höher dein code ist modular genug, um port nur mit diesen Klassen und in den container.
Diese Frage ist ein bisschen verrückt - der code, der in der Frage nicht kompilieren.
Müssen Sie definieren
ADoer
undBDoer
als gut.