Announcement

Collapse
No announcement yet.

Anonyme Konstruktion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Anonyme Konstruktion

    Hi. Hab mal wieder ein Problem.
    Ich will eine ArrayList machen, in der LinkedListen liegen, die wiederum aus 2 Strings und 2 Vectoren bestehen. Nun habe ich mal als Beispiel, dass ganze an einer Datei versucht, allerdings komme ich mit den anonymen Konstruktoren nicht klar (illegal start of type). Der Code sieht folgendermaßen aus (folderDefinitions ist dabei die erste ArrayList):

    return folderDefinitions.add
    (
    new LinkedList()
    {
    add("AIM.FAQ");
    add("VIEW_FAQ");
    add
    (
    new ArrayList()
    {
    add("aimkey");
    add("product");
    add("function_type");
    add("short_desc");
    add("custom_1_date");
    }
    );
    add
    (
    new ArrayList()
    {
    add("AIMKEY");
    add("PRODUCT");
    add("FUNCTION_TYPE");
    add("SHORT_DESC");
    add("CUSTOM_1_DATE");
    }
    );
    }
    );

    Muss ich jetzt jeweils noch ein public void add(Object o){... hinzufügen, oder wie bring ich das zum laufen?

  • #2
    Ok, ich hab das Ganze jetzt so umgecoded:

    ArrayList getDefinedFolders(ArrayList folderDefinitions);
    {
    folderDefinitions.add
    (
    new LinkedList()
    {
    public void add()
    {
    this.add("AIM.FAQ");
    this.add("VIEW_FAQ");
    this.add
    (
    new ArrayList()
    {
    public void add()
    {
    this.add("aimkey");
    this.add("product");
    this.add("function_type");
    this.add("short_desc");
    this.add("custom_1_date");
    }
    }
    );
    this.add
    (
    new ArrayList()
    {
    public void add()
    {
    this.add("AIMKEY");
    this.add("PRODUCT");
    this.add("FUNCTION_TYPE");
    this.add("SHORT_DESC");
    this.add("CUSTOM_1_DATE");
    }
    }
    );
    }
    }
    );
    return folderDefinitions;
    }

    Krieg aber noch die Fehlermeldung, dass der method body fehlt (???) oder man die klasse abstrakt definieren soll. Ausserdem meint er, dass folderDefinitions ein finalInitializer wär und ich ihn deshalb nicht im return zurückgeben darf. Kurz: Ich bin verwirrt..

    Comment


    • #3
      Du hast anonyme Funktionen nicht verstanden. Mit new LinkedList() { ... } erzeugst Du eine anonyme Klasse, die auf LinkedList basiert, aber ein paar Methoden ueberlaedt. Du schreibst praktisch die Klasse um, aber Du gibst dort KEINE neuen Konstruktor-Anweisungen an. Wieso musst Du denn auch alles in eine Zeile quetschen? Es ist gar nicht so einfach, Deine Struktur auseinanderzufaedeln, und gut wartbar ist es auch nicht.<p>
      <pre>
      ArrayList a1 = new ArrayList();
      a1.add("aimkey");
      a2.add("product");
      a3.add("function_type");
      a4.add("short_desc");
      a5.add("custom_1_date");
      ArrayList a2 = new ArrayList();
      a2.add("AIMKEY");
      a2.add("PRODUCT");
      a2.add("FUNCTION_TYPE");
      a2.add("SHORT_DESC");
      a2.add("CUSTOM_1_DATE");
      LinkedList l = new LinkedList();
      l.add("AIM.FAQ");
      l.add("VIEW_FAQ");
      l.add(a1);
      l.add(a2);
      </pre>
      Falls Du solche Sachen oft brauchst, solltest Du Dir die ArrayList um einen Konstruktor erweitern, der Objekt-Arrays akzeptiert, und dann kannst Du die ArrayLists zumindest mit einem Streich anlegen.<p>
      Gruss, Marc

      Comment


      • #4
        <I>Mit new LinkedList() { ... } erzeugst Du eine anonyme Klasse, die auf LinkedList basiert, aber ein paar Methoden ueberlaedt.</I>
        Soviel weiss ich auch, mir lag es eher dran, dann praktisch dass add() (eben ohne jegliche parameter -> nix überladen) aufzurufen und dieses sollte mir halt dann eine ArrayList zurückgeben.

        <I>Wieso musst Du denn auch alles in eine Zeile quetschen? Es ist gar nicht so einfach, Deine Struktur auseinanderzufaedeln, und gut wartbar ist es auch nicht.</I>
        Woher willst du wissen, dass es in einer Zeile ist? Das Ganze ist mit ziemlich vielen Tabs und Umbrüchen gemacht (es gibt wohl kaum Leute, die so viel formatierten Code produzieren ) - nur hab ich vergessen, die PRE Tags zu setzen %)

        So wie du das konstruiert hasst hatte ich es zwar anfangs auch, aber 1. wollte ich es nach Möglichkeit ohne Instanzen machen und 2. hatte ich da einen bösen Denkfehler drin, wodurch ich zu diesem komischen konstrukt gekommen bin.

        <I>Falls Du solche Sachen oft brauchst, solltest Du Dir die ArrayList um einen Konstruktor erweitern, der Objekt-Arrays akzeptiert, und dann kannst Du die ArrayLists zumindest mit einem Streich anlegen.</I>
        Ich bin im Moment soweit, dass ich mich mal hinsetzen muss, und alle zusätzlichen Konstruktoren, die ich mit der Zeit gebaut hab in die Klassen einbau. Es gibt da einiges an Unzulänglichkeit
        Thx for hel

        Comment

        Working...
        X