tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
545
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    picsou picsou ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Hallo,

    ich versuche mehrere anonyme Objekte einer Klasse zu erstellen und möchte diesen anonym erzeugten Objekten jeweils unterschiedliche Eigenschaften geben.

    Als Beispiel habe ich eine Klasse Auto und eine Klasse Farbausstattung ich schreibe:

    public class Farbausstattung(){
    return new Auto();
    }

    Wie kann ich dieses anonyme Objekt jetzt mit Eigenschaften bestücken? Oder wenn ich mehrere erzeuge eben mehrere mit unterschiedlichen Eigenschaften bestücken?
     

  2. #2
    SE Tutorials.de Gastzugang
    Also erstmal davon abgesehen das wir hier Code-Tags haben *siehe Signatur* und du diese auch gerne verwenden darfst ... ist das da überhaupt kein valider Java-Code.
    Ich würde mir erstmal die Signatur vornehmen ... was willst du überhaupt ? Eine Klasse ? Einen Konstruktor ? Oder doch nur einen einfachen Getter ? Außerdem kannst du nicht einfach im static-class-kontext irgendwas returnen ... noch nicht mal wenn du es im static{}-Block hast. Auch kannst du nicht in Klasse X ein Objekt der Klasse Y returnen *klar geht schon ... aber wozu ?*.
    Auch find ichs klasse wie du versuchst mit einem anonymen Objekt noch was anzustellen. Ein Objekt ist dann anonym wenn du aus deinen Kontext keine Referenz drauf hast , es aber dennoch existiert und durch andere Referenzen im Speicher gehalten wird.
    Um jetzt aber mit einem Objekt interagieren zu können brauchst du in deinem ClassLoader-Kontext eine Refernz ... dann wäre es aber nur noch ein normales Objekt und nicht mehr anonym.

    Gestatte mir mal bitte eine ganz erliche Frage : wie lange arbeitest du schon mit Java ? Weil dieses Fehlen von Grundlagen sagt mir : noch nicht all zu lange. Vielleicht solltest du mal einen Blick in die JavaInsel werfen ...
     

  3. #3
    sebastianb sebastianb ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    125
    Hey hier mal ein paar Code-Snippets:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    public class Test
    {
        public Test()
        {
            System.out.println(createAndReturnAuto().getName());
        }
        
        public  Auto createAndReturnAuto()
        { 
            return new Auto("Audi A5");
        }
        
        public static void main(String[] args)
        {
            new Test();
        }
    }
     
     
    public class Auto
    {
        private String name;
     
        public Auto(String name)
        {
            this.name = name;
        }
     
        public String getName()
        {
            return name;
        }
     
        public void setName(String name)
        {
            this.name = name;
        }
    }
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,
    ich bin mir nicht ganz sicher ob du das meinst, aber machs doch mal so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public  Auto createAndReturnAuto()
    { 
       return new Auto("Audi A5") {
          private String deineAnonymeClassVariable
     
          public void deineAnonmyClassMethode() {
             ...
          }
       };
    }

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  5. #5
    SE Tutorials.de Gastzugang
    @Fabio
    Nein ... das meint TO nicht ... das was du da gemacht hast ist eine anonyme Klasse ... er will aber nur ein anonymes Objekt was so wie er es gepostet hat schon richtig ist.

    @TO
    Der Code da oben dürfte so compilebar sein und auch genau das tun was du erwartetst *nicht getestet* ...
    Das Problem ist nur das dein anonymes Objekt nach dem Aufruf des Konstruktors in dem es erzeugt wird nicht mehr vorhanden ist da ALLE referenzen auf dieses Objekt weg sind und es durch den GC aufgeräumt wird.
    Die Methode setName(String) wirst du so nie aufrufen können da bereits dierekt nach dem System.out.println(String) dein anonymes Objekt wieder weg ist da es ja keine weiteren Referenzen gibt. Allerdings kannst du so wie du es da hast durch aus ein normales Objekt mit
    Code java:
    1
    
    Auto auto=createAndReturnAuto(String);
    erzeugen und dann über die Referenz "auto" darauf zugreifen.

    Also versuche uns doch bitte noch mal genau zu erläutern was du eigentlich vorhast ... da eine solche Verwendung von anonymen Objekten zwar Möglich ist ... aber erlich gesagt nicht gerade sinnvoll.
     

  6. #6
    picsou picsou ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Doch doch, ich meine das so. Ich habe einfach noch nicht bemerkt gehabt, dass ich einem anonymen Objekt Parameter mitgeben kann. Und durch die Hinweise hier habe ich endlich den richtigen Aspekt zur Änderung der Anonymen Objekte bekommen :o)))

    Code :
    1
    2
    
     
    a = auto(100 * z, 100 * y);

    Ich war bisher immer auf dem Holzweg mit meiner Meinung, anonyme Objekte würden parameterlos übergeben werden müssen.

    Ich danke euch allen Ihr seid SPITZE :o)))
     

  7. #7
    picsou picsou ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Ich setze mir einen Vector und nehme eine Hash Table. Dann kann ich sie parametrisieren und ausgeben.

    Genauso werd ich es machen :o)))
     

  8. #8
    SE Tutorials.de Gastzugang
    Natürlich kannst du allen Konstruktoren Parameter mitgeben solange du einen entsprechenden Konstruktor hast. Das Problem mit anonymen Objekten ist das du nach der Erzeugung keine Referenz drauf hast. Das was du da machst
    Code java:
    1
    
    Auto a=new Auto(int, int);
    ist ja dann kein anonymes Objekt mehr da du eine Referenz hast.
     

  9. #9
    sebastianb sebastianb ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    125
    Hier auch noch eine elegante Lösung für solche Probleme:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public class Auto
    {
       public Auto(int... values)
       {
          for (Integer value : values)
          {
             System.out.println(value);
          }
     
          for (int i = 0; i < values.length; i++)
          {
             System.out.println(values[i]);
          }
       }
     
       public static void main(String[] args)
       {
          new Auto(1);
          new Auto(1, 2, 3);
          new Auto(1, 2, 3, 4, 5);
       }
    }

    durch den Konstruktor
    Code java:
    1
    
    public Auto(int... values)
    ist es möglich beliebig viele Parameter zu übergeben. Intern wird das Ganze dann in ein Array umgewandelt über welches man ganz normal drüber iterieren kann

    Gruß

    Sebastian
     

  10. #10
    SE Tutorials.de Gastzugang
    Wo hier nur das "anonym" voll reinkracht weil man erzeugt Objekte ... und kann damit nichts machen weil es weder Referenzen gibt noch das Objekt selbst weil es durch die fehlenden Referenzen durch den GarbageCollector aufgeräumt wird.
     

Ähnliche Themen

  1. Eigenschaften eines javaScript Objekt über jQuery ansprechen
    Von BlubBlub im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 04.04.11, 09:39
  2. BCB Eigenschaften der Objekte mit Timer versehen ?
    Von Pixtar im Forum Borland CBuilder und VCL
    Antworten: 2
    Letzter Beitrag: 01.12.07, 19:09
  3. Anonymes Formular erstellen
    Von EasyRider2 im Forum PHP
    Antworten: 1
    Letzter Beitrag: 28.03.05, 18:08
  4. Anonymes ftp verhindern
    Von salo im Forum PHP
    Antworten: 1
    Letzter Beitrag: 23.11.04, 15:33
  5. Objekt mit runden Kanten versehen.
    Von Jan-Frederik Stieler im Forum 3D Studio Max
    Antworten: 6
    Letzter Beitrag: 16.09.04, 20:34