WinFuture-Forum.de: Java - Generische Datentypen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java - Generische Datentypen


#1 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 11. Mai 2006 - 12:37

habe folgende beispiele:
Klasse TollesPaar

Zitat

public class TollesPaar<T extends Kleidung> {
private T l, r;
public TollesPaar (T l, T r) {
this.l = l;
this.r = r;
}
public T getL() {
return l;
}
public T getR() {
return r;
}
public String toString() {
return "(l,r) = (" + l + "," + r +")";


Zitat

public class Kleidung {
}
public class Hemd extends Kleidung {
public String toString() {
return "Hemd";
}
}
public class Hose extends Kleidung {
public String toString() {
return "Hose";
}
}


Klasse zum Testen

Zitat

public class TollesPaarTestWild1 {
public static void
paarAusgeben1(TollesPaar<Kleidung> tp){
System.out.println(tp);
}
public static void main(String [] args) {
Hose ho1 = new Hose();
Hose ho2 = new Hose();
TollesPaar<Hose> p1 = new TollesPaar<Hose> (ho1,ho2);
paarAusgeben1(p1); //hier kommt der fehler
}
}


ich verstehe nun nicht, warum das nicht funktioniert. Hose ist ja eine Unterklasse von Kleidung...
kann mir das jemand verständlich erklären?
0

Anzeige



#2 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 11. Mai 2006 - 13:01

Moin,

also, der Fehler liegt hier
paarAusgeben1(TollesPaar<Kleidung> tp){ .... }

Deine Funktion erwartet hier spezifisch ein TollesPaar<Kleidung>. Wenn du allgemein schreibst
paarAusgeben1(TollesPaar tp){ .... }

ist alles in Butter. Alternativ (und besser):
TollesPaar<Kleidung> p1 = new TollesPaar<Kleidung> (ho1,ho2);

0

#3 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 11. Mai 2006 - 13:55

Zitat

Deine Funktion erwartet hier spezifisch ein TollesPaar<Kleidung>


geht da kein tollespaar hosen.hosen ist ja ne unterklasse und in der klasse tollespaar steht ja schon, dass alle unterklassen von kleidung (inkl. kleidung selbst) erlaubt sind. oder bedeutet das bei methoden dann, dass genau der angegebene typ übergeben werden muss?

müsste ich es dann so schreiben:

Zitat

Deine Funktion erwartet hier spezifisch ein TollesPaar<? extends Kleidung>

0

#4 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 11. Mai 2006 - 14:38

Moin,

ja, genau. Da du in TollesPaar ja schon auf "? extends Kleidung" eingeschränkt hast, könntest du bei der Ausgabe-Methode auch schreiben
public static void paarAusgeben1(TollesPaar<?> tp)
{
	System.out.println(tp);
}

Nur sobald du einen spezifischen Typ reinschreibst, erwartet Java auch genau den.
0

#5 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 11. Mai 2006 - 15:01

Besser:

public static <T> void paarAusgeben1(TollesPaar<T extends Kleidung> tp)
{
	System.out.println(tp);
}


und noch besser, weil allgemeiner:

public static void paarAusgeben1(Object tp)
{
	System.out.println(tp);
}

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0