Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^

skuki

Aktives Mitglied
Hallo,

kann ich eine Generische Methode so erstellen, dass sie beliebige Objekte einer Klasse als Parameter erlaubt, die ein bestimmtes Interface implementieren?


Habe zwei abstrakte Klassen "Schachtel" und "Geschenk" die unabhängig voneinander Untertypen besitzen.

Weiters habe ich eine Klasse "Schachtellager" die Geschenke einpackt.

void packe(Geschenk g) reicht mir aber nicht, da auch eine Schachtel in eine andere Schachtel eingepackt werden kann.


Würde das ungern über dynamisches Binden lösen, da hier der Code dupliziert wird.

Hätte hier jemand einen Tipp? 🙂
danke!
 
Moin,

habe offen gestanden kein Wort von dem verstanden, was Du uns sagen willst ...

"packe(Geschenk g)" IST doch eine Methode, die beliebige Objekte einer Klasse (hier "Geschenke") als Parameter erlaubt .....
:bahnhof:

Gruß
Klaus
 
Wenn Schachtel und Geschenk keine Gemeinsamkeiten in Form von Interfaces oder Abstrakten Mutter Klassen haben, dann geht das wohl nicht.
 
Warum verwendest du kein Interface dafür?
Zum Beispiel implementieren Schachtel und Geschenk beide das Interface "Packageable" (oder wie auch immer ein passendes Interface heißen würde 😉).
Dein Schachtellager bekommt dann nur ein "Packageable" Objekt übergeben und kann es weiterverpacken oder eben lagern.
 
Du kannst das mit einem Flag-Interface lösen.

In soetwa:
Java:
import java.util.ArrayList;
import java.util.List;

public class Store {
  public static void main(String... args) {
    Store t = new Store();
    t.add(new Present());
    t.add(new LittlePresent());
    t.add(new Box());
    for (Packable p : t.list) {
      p.verbose();
    }
  }
  
  List<Packable> list;
  
  public Store() {
    list = new ArrayList<>();
  }
  
  public void add(Packable pckg) {
    list.add(pckg);
  }
  
  static class Present implements Packable {
    @Override
    public void verbose() {
      System.out.println("Present");
    }
  }
  
  static class LittlePresent extends Present {
    @Override
    public void verbose() {
      System.out.println("Little present");
    }
  }
  
  static class Box implements Packable {
    @Override
    public void verbose() {
      System.out.println("Box");
    }
  }
  
  interface Packable {
    void verbose();
  }
}
 
Ich hab das anscheinend sehr unverständlich beschrieben. Entschuldigung

Natürlich habe die beiden Klassen ein Interface gemeinsam.

Dein Schachtellager bekommt dann nur ein "Packageable" Objekt übergeben und kann es weiterverpacken oder eben lagern.

Das so etwas geht habe ich zwar gehofft aber nicht gewusst. Reicht dann einfach void verpacke(Packageable p) ?

danke

EDIT:
Perfekt danke 🙂
 
Zuletzt bearbeitet:
Es geht vor allem darum, dass du mit Interfaces einen oder mehrere Datentypen für ein und das Selbe Objekt verwenden kannst. Und dass man in der argumentenliste Objekte von bestimmten Datentypen deklarieren kann, wusstest du sicherlich 🙂 Also frag dich lieber, ob du Interfaces auch richtig verstehst...
Das soll auch nicht böse gemeint sein 🙂

Grüße coco07
 

Zurück
Oben