Pointer-Ähnliches in Java?

  • Themenstarter Themenstarter Frozenlife
  • Beginndatum Beginndatum
F

Frozenlife

Hallo,

ich habe ein rießen Problem. Und zwar habe ich eine Oberfläche, Steuerklasse und noch eine Oberfläche (BerufInsert).

Also wenn ich das Programm starte wird die erste Oberfläche aufgerufen. Hier kann man Mitarbeiter hinzufügen,... mit einer ChoiceBox für die Berufe (welche ich erst adden muss).

Aber wenn ich einen neuen Beruf hinzufügen will muss ich erster die 2. Oberfläche starten. Da ich ein Objekt der Steuerklasse in der ersten Oberfläche erzeuge (in diesem Objekt sind alle Mitarbeiter, Berufe gespeichert), kann ich keine Berufe in der 2.ten Oberfläche hinzufügen.

Gibt es eine Möglichkeit das Steuerklassen Objekt der ersten Oberfläche als sowas wie Pointer (ich weis gibt es nicht) der zweiten Oberfläche zu übergeben, da wenn ich einen Beruf in der 2.ten Oberfläche adde, ich den Beruf in der ersten Oberfläche habe.

Oder kann man so ähnliches wie einen Rückgabewerte von der 2ten Oberfläche an die 1te Oberfläche übergeben?

mfg frozenlife
 
Naja intern arbeitet Java schon mit Pointern auf Objekte, nur kann man die nicht einfach manipulieren :-)
Wenn ich das richtig verstanden habe müsste das ja so klappen:

Oberfläche 1:
Java:
public class Oberflaeche
{
  Steuerklasse clazz = new Steuerklasse(..) //o.ä. halt wie du das machst^^
  Oberflaeche2 flaeche = new Oberflaeche2(clazz); //clazz-Referenz Oberflaeche2 uebergeben
.
..
clazz.addBeruf("Programmierer");
..
.
}
Oberfläche 2:
Java:
public class Oberflaeche2
{
  Steuerklasse clazz;
  public Oberflaeche2( Steuerklasse clazz )
  {
    this.clazz = clazz;
  }

.
..
clazz.addBeruf("Code-Tester");
..
.
Oder du löst das halt mit Rückgabewerten wie du schon richtig sagst..
Gruß
Tobias
 
Soweit war ich auch schon, nur das Problem ist, dass wenn ich jetzt die Oberfläche 2 schließe (mit this.hide()), der Beruf nicht in der Steuerklasse der Oberfläche 1 vorhanden ist, da ich ja Call By Value die Steuerklasse der Oberfläche 2 übergeben hab und nicht einen Pointer drauf (in C++ wäre es einfach mit Pointern).

Ich habe mich jetzt von der Oberfläche 2 getrennt und die Eingabe des Berufes auch direkt in der 1ten Oberfläche hineingetan (ist zwar nicht so übersichtlich aber es hat mir viel Zeit ersparrt - da ich unter Zeitdruck stehe (für die Schule)).

Aber wie kann ich mit Rückgabewert das lösen? Wie kann ich aus der 2ten Oberfläche die Steuerklasse der 1ten Oberfläche zurückgeben. Würde mich auch mal so interessieren.

mfg Frozenlife
 
Soweit war ich auch schon, nur das Problem ist, dass wenn ich jetzt die Oberfläche 2 schließe (mit this.hide()), der Beruf nicht in der Steuerklasse der Oberfläche 1 vorhanden ist, da ich ja Call By Value die Steuerklasse der Oberfläche 2 übergeben hab und nicht einen Pointer drauf (in C++ wäre es einfach mit Pointern).

Ähm.. Nein! Du übergibst der Oberfläche2 eine (Kopie) der Referenz auf das Objekt der Steuerklasse.. Bsp (in Klasse Oberfläche2):
Java:
public void doSomething()
{
  //Neuen Beruf entgegennehmen bla bla
  //--
  steuerklasse.add("Beruf");
}

Natürlich hat diese Aktion auch Auswirkungen auf die Steuerklasse die der Klasse Oberfläche bekannt ist!
Was keine Auswirkungen hätte wäre:
Java:
public void doSomething()
{
  //Neuen Beruf entgegennehmen bla bla
  //--
  steuerklasse = steuerklasseNeu;
}
, da hier lediglich die Referenz und nicht das Objekt selber geändert wird :)

Als kleines Beispiel:
Java:
public class ReferenceTest {
  public ReferenceTest() 
  {
    Container a = new Container();
    Changer c = new Changer(a);
    
    System.out.println( a.get() );
    c.change();
    System.out.println( a.get() );
    c.changeAgain();
    System.out.println( a.get() );
  }

  public static void main( String[] args ) {
    ReferenceTest unbenannt15 = new ReferenceTest();
  }
}

class Container
{
  private String s = "_DEFAULT_";
  public void set( String s )
  {
    this.s = s;
  }
  public String get()
  {
    return s;
  }  
}

class Changer
{
  Container a;
  public Changer( Container a )
  {
    this.a = a;
  }
  public void change()
  {
    a.set("_CHANGED_");
  }
  public void changeAgain()
  {
    a = new Container();
    a.set("_CHANGE_AGAIN_");
  }
}

Gruß
Tobias
 
Zurück