Zum Inhalt springen

"dynamische" Objekt Parameter


Empfohlene Beiträge

Geschrieben

Hallo liebe Community,

kaum freut man sich mal, weil man auf eine geniale Idee gekommen ist und dann merkt man, dass es doch nicht so einfach geht. Deshalb wende ich mich einfach mal schnell an euch.

Gibt es den eine Möglichkeit einer Methode "dynamische" Objekt-Parameter zu vergeben?

Damit meine ich, dass es der Methode egal ist von welchem Objekt dieses Parameter stammt und er es einfach weiterreicht.

Vielen Dank für Eure Hilfe.

Cheatboy

Geschrieben

Du hast echt ein seltenes Talent, unverständliche Fragen zu stellen.

Ich versuche mal eine Interpretation: Du willst eine Methode, die einen Parameter übernimmt. Dieser Parameter soll von jedem möglichen Typ sein (java.util.ArrayList, java.awt.Panel, java.lang.String, my.personal.package.Class, ...).

Wenn ja, dann: public void foo(Object bar)

Dann kannst Du alles reinstecken, was Object ist (und dank autoboxing seit Java 1.5 sogar geboxte Primitives).

Versuch doch bitte unabhängig davon, ob ich richtig geraten habe oder nicht, Deine Fragen noch mal zu lesen, bevor Du sie abschickst. Und dann tust Du mal so, als würdest Du Dein Problem nicht kennen. Und dann versuchst Du, zu begreifen, was Du willst. Und dann formulierst Du die Frage nochmal und startest am Beginn des Absatzes.

Peter

Geschrieben

Ich begreife dies (auch) als Frage nach variablen Parametern. Du weißt also zur Laufzeit nicht, von welchem Typ der Parameter ist, der in eine bestimmte Methode soll? Nach meinem Kentnissstand muss die Signatur einer Methode immer eindeutig sein. Für jede weitere Überladung musst Du sie neu implementieren.

Die Version mit Object als (einziger) "gemeinsamer Nenner" der Parameter-Kandidaten halte ich für ziemlich dünnes Eis, als Notlösung aber sicherlich möglich.

Geschrieben

So, ich habe hier eine Methode in meinem Interface.

Dann habe ich meine verschiedenen Objekte, bsp.

Klasse1 objekt1 = new Klasse1();

Klasse2 objekt2 = new Klass2();

Klasse3 objekt3 = new Klasse3();

So, wenn ich nun Klasse1 als Parameter übergeben möchte wäre es ja

public void blabla(Klasse1 obj){...}

Nun müsste ich jedoch für meinen Fall mit mehrere Objekt-Parametern arbeiten, welches jedoch in meiner Situation extreme Verwirrung in den Code bringen würde!

KlasseM.java

KlasseM implements Interfaces[...]

public String gefahrenpotential(int i, Klasse1 obj1)

{

switch(i)

{

case 1: blablabla

case 2: blablabla

case 3: blablabla

}

}

Klasse1.java

Klasse1 extends KlasseM implements Interfaces[...]

{

public String gefahrenpotential()

{

//"Identifikationsnummer" wird vergeben

int i = 1;

//Objekte werden benötigt, damit SuperMethode richtigen Wert ermitteln kann

MainClass tp = new MainClass(); (!!Klasse nicht im beispiel)

Klasse1 objekt1 = tp.setValues(new Klasse1());

return super.gefahrenpotential(i, objekt1);

}

}

Klasse2.java

Klasse2 extends KlasseM implements Interfaces[...]

{

public String gefahrenpotential()

{

//"Identifikationsnummer" wird vergeben

int i = 2;

//Objekte werden benötigt, damit SuperMethode richtigen Wert ermitteln kann

MainClass tp = new MainClass(); (!!Klasse nicht im beispiel)

Klasse1 objekt2 = tp.setValues(new Klasse1());

return super.gefahrenpotential(i, objekt2); <--- Da liegt das Problem, Parameter schreiben ja fest das, dass Objekt von der Klasse1 kommen muss! Parameter für jede einzelne Klasse möchte ich jedoch nicht erstellen

}

}

Geschrieben
So, ich habe hier eine Methode in meinem Interface.

Dann habe ich meine verschiedenen Objekte, bsp.

Klasse1 objekt1 = new Klasse1();

Klasse2 objekt2 = new Klass2();

Klasse3 objekt3 = new Klasse3();

So, wenn ich nun Klasse1 als Parameter übergeben möchte wäre es ja

public void blabla(Klasse1 obj){...}

Nun müsste ich jedoch für meinen Fall mit mehrere Objekt-Parametern arbeiten, welches jedoch in meiner Situation extreme Verwirrung in den Code bringen würde!

Lösung 1: object-Array übergeben, dieses durchlaufen, Typen casten

Lösung 2: Ich weiß nicht, ob dies in java möglich ist. Im .NET gibt es ein reserviertes Wort "params". Dies ermöglicht eine variable Anzahl an Parametern zu übergeben.

public void DoSomething(params object[] objects)

Unterschied zu Lösung 1: Ich muss hier nicht das Array erzeugen, sondern kann die Parameter direkt in die Methode geben.

Geschrieben

Du lässetdoch die Klassen (Klasse1, Klasse2 und Klasse3) von einer anderen Klasse (mit namen "MKlasse") erben (extends). Der Methoda blabla muss dann ein Objekt vom Typ "MKlasse" übergeben werden:

public void blabla(MKlasse obj)

in der Methode kannst du dann mit "instanceof" den Typ abfragen.

Geschrieben

So vielen Dank für die vielen konstruktiven Lösungsvorschläge! Habe mich dann schlussendlich für die Lösung1.) von lbm1305 entschieden mit dem Casten und siehe da: es klappt ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...