Cannot make a static reference to the non-static field xyz

  • Hi,
    hänge an einem kleinen Problem:


    Ich habe 3 Klassen.
    Main
    Sub
    Sub2


    In Klasse Sub wird eine LinkedList erstellt erstellt:
    [cs]List<Sub2> list = new LinkedList<Sub2>();[/cs]
    In der Mainklasse, und zwar in der main methode (die ja statisch ist), wollte ich einen Eintrag in die LinkedList einfügen:
    [cs]Sub obj = new Sub();
    obj.list.add(new Sub2());[/cs]
    Hier in der zweiten Zeile kommt der Fehler:
    Cannot make a static reference to the non-static field obj


    Warum der Fehler kommt ist mir klar, aber nicht, wie man ihn umgeht oder löst. Wir sollen die Listen in der main Methode füllen, von daher kann ich das auch nicht anderswo machen (wie z.B. in der Sub Klasse).


    Wär schön, wenn mir jemand auf die Sprünge helfen kann. Achso: Die Listen sollen nicht statisch sein!


    Danke,
    S3cret

  • Die Methode main der Klasse Main muss statisch sein. Alles andere ist aber nicht statisch. Wenn ich z.B. bei der main Methode das static wegnehme, entfällt auch der Fehler, aber dann meckert ja logischerweise der Compiler.
    Ich habe das jetzt provisorisch gelöst indem ich in der ein Objekt der Klasse Main erstelle:
    [cs]Sub obj = new Sub();
    obj.list.add(new Sub2());[/cs]
    wird zu
    [cs]Main mainObj = new Main();
    Sub obj = new Sub();
    mainObj.obj.list.add(new Sub2());[/cs]
    Das funktioniert auch, nur irgendwie kommt mir das zu komplex vor. Deshalb vermute ich dass es noch eine einfachere Möglichkeit gibt.

  • Ja, dann war meine Vermutung richtig. obj ist bei dir eine Instanzvariable und keine Klassenvariable. Hau da static vor, dann gehts.


    Und generell greift man nicht direkt auf Eigenschaften zu, sondern kapselt die Zugriffe über entsprechende Getter und Setter.


    Komme mir gerade dumm vor, warum ich da nicht einfach mal static vorgesetzt habe...
    Getter und Setter folgen noch.


    Danke jedenfalls =)

  • ich dachte du sollst die listen nicht static machen. wenn du die klassen, in denen die listen deklariert sind, static machst, werden die listen auch static

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • ja, ich dachte das wäre in der assage im ersten post gemeint mit die listen sollen nicht static sein.

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird