Von einer Klasse auf eine Liste einer anderen Klasse zugreifen

  • Themenstarter Themenstarter s.g.
  • Beginndatum Beginndatum
S

s.g.

Gast
Hallo,

Wie kann ich von der Klasse3 auf die public Liste der Klasse2 zurückgreifen und die Inhalte dieser Liste vergleichen.
Die Liste ist ja public, somit von außen erreichbar. Alle Klassen sind in dem gleichen Package. Da die Liste auch mit Werten gefüllt ist, warum kriege ich ein NullPointerException? Rufe ich die Liste falsch auf bzw. an einer falschen Stelle?
Wo ist mein Fehler?


meine Ausgangsbasis:

Java:
// die Methode2 aus Klasse2 soll angestossen werden, was auch passiert 
public Klasse1  
{
       Klasse2 klasse2 = new Klasse2();
       for(...)
       {
              methode1()
              {
                     klasse2.methode2(parameter1, parameter2);
              }
       }       
}

//In dieser Klasse wird die list mit String-Werten gefüllt. 
//über System.out.println(list) kann ich die liste auch mit den Werten ausgeben
public Klasse2
{
       public List<String> liste = new ArrayList<String>();
       public String variable1;

       public void methode2(String param1, String param2)
       {
              for(...)
              {
                     variable1 = ...
                     list.add(variable1);
              }
       }
}

// auf die Liste aus Klasse2 zurückgreifen und die Listen-Inhalte vergleichen. 
//Funktioniert leider nicht. Bei der for-schleife bekomme ich ein NullPointerException. 
public Klasse3
{
       Klasse1 klasse1 = new Klasse1();
       Klasse2 klasse2 = new Klasse2();
       String name;

       klasse1.methode1(); // hier wird die methode1 angestossen, damit die methode2 aus der Klasse2 die entsprechenden Werte erhält

       methode3()
       {
              for(...)
              {
                     name = irgendetwas.getName();
                     for(String test : klasse2.list) // ich möchte über alle Elementer der Liste, die in methode2 der Klasse2 gefüllt wurde iterieren. Aber ich bekomme Als Fehlermeldung "NullPointerException". Warum? 
                     {
                            if(name.equals(test)
                                   System.out.println("Yuhuu es funktioniert");
                     }
              }
       }
}
 
Du solltest die Liste lieber privat halten und eine getter Methode schreiben, wobei die NullPointer exception gerade bei einer List auf eine falsche Verwendung der Liste hindeutet.
Das kann ich aber nur mit diesen Codebroken nicht sehen.

Schreib mal in deine For Schleife direkt nach Aufruf der Liste eine Ausgabe, dann siehst du ob er die Liste verwendet und nur zu lange itteriert, oder ob er sie garnicht verwenden kann.
 
Zuletzt bearbeitet:
In der Zeile 46 tritt ein NPE auf.

Irgendwie kann ich mit klasse2.list nicht auf die gewünschte Liste zurückgreifen.

Ich werde eine getter-Methode entsprechend bauen.
 
Wenn du es so machst, wie dort oben angedeutet und Klasse3 quasi der Anfang ist, dass liegt das Problem darin, dass du in Klasse1 eine andere Instanz von Klasse2 verwendest als in Klasse3. Somit kann die Liste nicht gefüllt sein. Wieso genau eine NPE dort auftritt kannst du ja erforschen, aber das sollte wohl der Fehler sein. Eine Möglichkeit wäre, das Objekt von Klasse2, das in Klasse3 erzeugt wird, an Klasse1 zu übergeben.
 
Ich habe jetzt in der Klasse2 die Liste als private deklariert und greife über eine getter-Methode auf die Liste zurück.

Jedoch verstehe ich nicht, wo das Problem liegt:
Mit Klasse3 rufe ich die methode1 auf. Diese wiederruf ruft die methode2 auf, die Liste wird gefüllt. Den Inhalt kann ich auch sehen.
Erst dann versuche ich dort die Liste zu holen.

Wie kann ich das Objekt von Klasse2, das in Klasse3 erzeugt wird, an die Klasse1 übergeben?
 
Du hast 2 mal die klasse2 deklariert.

Kannst du mal den ausführbaren code einstellen, dann kann ich das raten aufhören und wirklich nach dem Fehler suchen.
 
Als Parameter im Konstruktor. Wenn du nicht weißt, wie das mit Konstruktoren funktioniert, solltest du dir das vielleicht erstmal durchlesen. Auf die Schnelle: der Konstruktor erstellt dir eine Instanz der Klasse, im Konstruktor kannst du dann auch noch beliebigen Code platzieren, beispielsweise initialisiert man dort verschiedene Variablen der Klasse. Und dann kann man eben auch Werte übergeben, mit diesen können dann die Variablen initialisiert werden. Der Konstruktor von Klasse1 sähe zB so aus:

Java:
public Klasse1(Klasse2 k2){
...}

und entsprechend dann der Aufruf:

Java:
Klasse2 k2 = new Klasse2();
Klasse1 k1 = new Klasse1(k2);
 
danke gonzo17 und wrakas!
das war der fehler, jetzt habe ich es auch verstanden. es funktioniert jetzt.
durch die übergabe der objekte funktioniert es.
 

Zurück
Oben