Frage zu Generic

Allgemeine Themen rund um Java

Moderator: wegus

Antworten
Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Frage zu Generic

Beitrag von Mungo1981M » 30.04.2013, 20:18

Hallo Leute,
Ich bräuchte eine Linked List, in die ich verschiedene Objecte einfügen kann.
Ziel ist es einen Automatismus zur schaffen der verschiedene Begriffe bildet.
Z.B.: <Apfel> = < Rot = 0.5; Grün = 0.4; Gelb = 0.1; Essbar=true>
Schon hier taucht das Problem auf, in die Liste kämen hier drei Flo ats und ein Boolean
Noch schwiriger wird es wenn ich selber Objecte schaffe die eigene Merkmale darstellen.
So wäre zum Beispiel zu denken dass dem Automaten ein List mit zu prüfenden Merkmallen übergeben würde.
Diese Überprüfung liese sich vielleicht als Methode des Objects formullieren.
Könnte man nun noch die liste interieren so wäre das sehr schön

Mit einem großen Fragezeichen im Kopf

Mungo1981M

Benutzeravatar
Tux1000
Beiträge: 264
Registriert: 05.04.2008, 16:09

Re: Frage zu Generic

Beitrag von Tux1000 » 01.05.2013, 10:03

Hallo,

ich verstehe deinen Ansatz/das Ziel nicht so ganz...

Das Problem mit den verschiedenartigen Objekten und die notwendigen Gemeinsamkeiten, kann man mit einem Interface oder einer abstrakten Klasse lösen:

Code: Alles auswählen

  public abstract class Obst {
    
    public abstract boolean check( );
    
  }
  
  public class Apfel extends Obst {

    @Override
    public boolean check() {
      return true;
    }
    
  }
  
  public class Birne extends Obst {

    @Override
    public boolean check() {
      return true;
    }
    
  }
Eine mögliche "check"-Methode könnte dann so auf die einzelnen Obst-Objekte angewandt werden:

Code: Alles auswählen

    List<Obst> listeMitObst = new ArrayList<Obst>();
    
    // Jetzt füllen wir die Liste mit Obst
    listeMitObst.add( new Apfel() );
    listeMitObst.add( new Birne() );
    
    for ( Obst obst : listeMitObst ) {
      obst.check();
    } // for
Wie gesagt, ich verstehe den Gedanken hinter deinem Text nicht so ganz....daher passt mein Vorschlag vielleicht auch nicht so ganz :wink:

Viele Grüße

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Frage zu Generic

Beitrag von Mungo1981M » 02.05.2013, 15:54

:D Du hast aber schon die Frage zum größten Teil beantwortet. :D
:oops: Nun liese sich ein Ober Object über "Obst" finden - ich glaube jedes Object stammt doch
von "Object" ab. :oops:
Stimmt das kann ich dann vom List entry auf eigenschaften von erbenden Klassen zugreifen.

Danke schon einmal

Mungo1981M

Benutzeravatar
Tux1000
Beiträge: 264
Registriert: 05.04.2008, 16:09

Re: Frage zu Generic

Beitrag von Tux1000 » 02.05.2013, 16:53

Mungo1981M hat geschrieben:Nun liese sich ein Ober Object über "Obst" finden - ich glaube jedes Object stammt doch
von "Object" ab.
Ja, das stimmt. Aber es muss ja nicht direkt von Object abstammen. Es können ja beliebig viele Klassen dazwischen liegen.
Im Beispiel ist Obst von Object abgeleitet und Birne bzw Apfel sind von Obst abgeleitet und damit auch (über Obst) von Object.

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Frage zu Generic

Beitrag von Mungo1981M » 02.05.2013, 18:51

:evil: :oops: Soll das heißen es geht also auch über "Object" selber ? :oops: :evil:
Ja o Nein o bitte ankreuzen :P

ebaumann
Beiträge: 286
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Frage zu Generic

Beitrag von ebaumann » 03.05.2013, 08:17

Mungo1981M hat geschrieben::evil: :oops: Soll das heißen es geht also auch über "Object" selber ? :oops: :evil:
Ja o Nein o bitte ankreuzen :P
In List<Object> lässt sich alles einfügen. Das war vor Einführung der Generics die einzige Möglichkeit, da war dann zu casten, z.B. Apfel apfel = (Apfel) obst, ohne Prüfung, falls der Inhaltstyp sichergestellt war oder falls nicht, wurde vor dem Cast der Typ sichergestellt mit instanceof. Ohne Typprüfung konnte es zur Laufzeit Class-Cast-Exceptions geben und außerdem ist solcher Code weder elegant noch objektorientiert. Tux1000 hat aufgezeigt, wie es besser geht: Ein Basis-Interface bzw. -Klasse, z.B. Obst, von der spezialisierte ableiten, z.B. Afpel und Birne. Das Interface definiert gemeinsam zu implementierende Methoden, z.B. getName(), die in spezialisierten Klassen zu implementieren sind. Diese Methoden werden beim Iterieren aufgerufen.

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Frage zu Generic

Beitrag von Mungo1981M » 03.05.2013, 16:50

:D :oops: Danke jetzt hab auch ich es VERSTANDEN :oops: :D

Antworten