Anonymes Objekt mit Eigenschaften versehen

picsou

Grünschnabel
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?
 
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 ...
 
Hey hier mal ein paar Code-Snippets:

Java:
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;
	}
}
 
Hi,
ich bin mir nicht ganz sicher ob du das meinst, aber machs doch mal so:
Java:
public  Auto createAndReturnAuto()
{ 
   return new Auto("Audi A5") {
      private String deineAnonymeClassVariable

      public void deineAnonmyClassMethode() {
         ...
      }
   };
}

Gruß

Fabio
 
@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
Java:
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.
 
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 :eek:)))

Code:
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 :eek:)))
 
Ich setze mir einen Vector und nehme eine Hash Table. Dann kann ich sie parametrisieren und ausgeben.

Genauso werd ich es machen :eek:)))
 
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
Java:
Auto a=new Auto(int, int);
ist ja dann kein anonymes Objekt mehr da du eine Referenz hast.
 
Hier auch noch eine elegante Lösung für solche Probleme:

Java:
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
Java:
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
 
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.
 

Neue Beiträge

Zurück