globale Variablen zur Laufzeit erzeugen

derFrank

Mitglied
hallo zusammen,
ich sitze hier schon seit Tagen an einem Problem und komme NICHT weiter. Hoffe ihr könnt mir hier weiter helfen, da ich mit meinem überschaubaren Wissen auf keinen grünen Zweig komme. Ich bin dabei mit JavaFX eine Desktopapplikation zu erstellen. Zur Laufzeit bekomme ich hier zwei Userbezogene Tokens zugewiesen mit welchen dieser später auf private Daten Zugriff erfolgen soll. Lange Rede kurzer Sinn, das Problem:

- ich habe drei unterschiedliche Klassen A, B und C.
- Klasse A hat eine Funktion, die als Rückgabewert zur Laufzeit zwei Tokens bekommt
- diese hole ich mit Hilfe einer Funktion in Klasse B und verarbeite sie hier. Diese zwei Variablen sagen wir a & b sind nun lokale Variablen der Funktion (sagen wir funkB() ) der Klasse B.
Nun mein Problem: Ich brauch diese Werte als quasi lokale Instanzen der gesamten Klasse C. Muss also in der gesamten Klasse C von jeder Funktion drauf zugreifen können.
Hoffe ich habe mich einigermaßen verständlich ausgedrückt. Bin echt am verzweifeln. Bekomme es einfach nicht auf die reihe.

im Grunde also einfach sowas nur:

Java:
public class B{
             public String secret;
             public String token;

                    public void funkB(){...        
                    secret="abc";         //Strings werden hier generiert
                    token="def";
                    }
                  }
public class C{
             public String secretInC;     //hier bräuchte ich mein secret aus "B" für die gesamte Klasse C
             public String tokenInC;      //hier bräuchte ich mein token  aus "B" für die gesamte Klasse C

                    public void funkC(){  ....       
                    }
                  }

Gruß Frank
 
Zuletzt bearbeitet:
Hallo

- Klasse A hat eine Funktion, die als Rückgabewert zur Laufzeit zwei Tokens bekommt

Also... Klasse A hat eine Methode welcher du die zwei Tokens übergibst? Eine Methode kann normalerweise nur ein Objekt/Zahl oder was auch immer zurückgeben. Eine Funktion kann ja nicht etwas als Rückgabewert bekommen, sondern gibt etwas als Rückgabewert zurück.

Und wie du das schon in deiner Klasse B machst sind die variablen secret und token globale Variablen der Klasse B, da sie ja nicht in einer Methode stehen. Aber evtl hast du in der Klasse B die gleichen Variablen nochmals definiert? Dann versuchs mit this.secret und this.token.
Java:
public class B{
             public String secret;
             public String token;
 
                    public void funkB(){...
                    String secret;
                    String token;        
                    secret="abc";         //Strings werden hier generiert
                    token="def";
                    this.secret = "die globale variable";
                    this.token = "auch die globale variable";
                    }
                  }

Wenn du nun die Variablen in der Klasse C haben möchtest machst du entweder eine setter-Methode in der Klasse C und rufst die von der Klasse B aus auf, oder eine getter-Methode in der Klasse B und rufst die von der Klasse C aus auf. Musst halt das eine Objekt dem anderen übergeben, zum Beispiel im Konstruktor.

Beispiel mit setter-Methode:
Java:
public class C{
             private String secretInC;     //hier bräuchte ich mein secret aus "B" für die gesamte Klasse C
             private String tokenInC;      //hier bräuchte ich mein token  aus "B" für die gesamte Klasse C
 
                    public void funkC(){  ....       

                    }

        public void setSecret(String secret)  {
            secretInC = secret;
        }

        public void setToken(String token)  {
            tokenInC = token;
        }
}

public class B {
  
  private C classC = null;
  private String secret;
  private String token;

  public B (C classC) {
     this.classC = classC;
  }
 
  public void funkC(){...        
        secret="abc";         //Strings werden hier generiert
        token="def";
        classC.setSecret(secret);
        classC.setToken(token);
  }

}

Globale Variablen public zu machen ist eigentlich nicht so gut, da du dann nicht kontrollieren kannst wie darauf zugegriffen wird. Getter- und Setter-Methoden sind eine gute Möglichkeit und werden oft werdendet, wie du auch bei vielen Java-Objekten sehen wirst

mfg
 
danke für die Antwort, aber das bekomm ich so nicht hin. Hab es am Anfang auf eine ähnliche Art und weise probiert. Vielleicht hab ich das Problem auch nicht zu 100% beschrieben da oben....
1. Ich habe eine Klasse A mit einer Methode.
2. mit Hilfe einer Klasse B Methode greife ich irgend wann auf die Methode der Klasse A welche mir einen Wert "XYZ" zurück gibt.
3. Wie schaffe ich es zu einem späteren Zeitpunkt auf den Wert "XYZ" mit Hilfe einer Methode der Klasse C zuzugreifen.

Das eigentliche Problem: Hinter der Methode die mir den Wert "XYZ" liefert verbirgt sich ein ganzes Login verfahren welches ich nur einmal im Betrieb aufrufen kann. Deswegen kann ich auch nicht einfach so mit gettern und settern arbeiten. Ich müsste also schon im Schritt 2 den wert so speichern, dass ich von da an für die Zeit einer Sitzung zugreifen könnte. Am leichtesten wäre es vielleicht den Wert in eine Datei zu schreiben und nach der Sitzung zu löschen. Was ist die leichteste Methode dowas zu tun?
Grüße Frank
 
danke für die Antwort, aber das bekomm ich so nicht hin. Hab es am Anfang auf eine ähnliche Art und weise probiert. Vielleicht hab ich das Problem auch nicht zu 100% beschrieben da oben....
1. Ich habe eine Klasse A mit einer Methode.
2. mit Hilfe einer Klasse B Methode greife ich irgend wann auf die Methode der Klasse A welche mir einen Wert "XYZ" zurück gibt.
3. Wie schaffe ich es zu einem späteren Zeitpunkt auf den Wert "XYZ" mit Hilfe einer Methode der Klasse C zuzugreifen.

Offensichtlich hat die Klasse A die Werte und kann das Loginprocedere abhandeln - wo ist also das Problem? Alle Klassen B - ZZZ greifen auf A zu und holen sich die Werte die sie brauchen

Wenn auch die Klasse C die Werte anbieten muss, müssen diese halt zuvor bei A beschafft werden.

Am besten zeichnest du ein UML Diagramm, dann ist es vielleicht einfacher zu erfassen...
 

Zurück
Oben