Diskussion:Generische Programmierung in Java

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 8. September 2008 um 20:31 Uhr durch Benji (Diskussion | Beiträge) (Dieser Artikel ist kein Artikel!). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Letzter Kommentar: vor 16 Jahren von Benji in Abschnitt Dieser Artikel ist kein Artikel!

Grats an diejenigen, die diesen Artikel verfasst haben. Wirklich gelungen und auf den ersten Blick (wahrscheinlich auch den zweiten usw.) vollständig :) --ChristianHujer 05:25, 14. Mär 2005 (CET)

Weiterhin ist es aufgrund dieser Vorgehensweise bei C++ sehr problematisch, virtuelle Methoden im Zusammenhang mit Templates zu verwenden

Inwiefern?

(beispielsweise dürfen Methoden einer template-Klasse nicht virtuell sein).

Bullshit. Aragorn2 20:40, 26. Mär 2005 (CET)
Worauf der Autor sich vermutlich unbewusst bezog, ist, dass Template-Methoden nicht virtuell sein dürfen. Bsp.:
template<typename A, typename B> class Foo {
public:
    virtual B bar(A someParameter) { /*...*/ }   // ok
};
Aber:
class Is_a_Everything {
public:
    template<typename ConvertTo>
    virtual operator ConvertTo() const = 0;   // Fehler: virtuelle Template-Methode
};
Siehe [Stroustrup, The C++ Programming Language, 3rd edition, Addison Wesley 2000, Abschnitt 13.6.2]
Nachdem Java auch mit der sogenannten Version "5.0" keine generischen Funktionen vorsieht (nur Methoden generischer Klassen), ist das ein Problem, dass in Java schon allein aufgrund der fehlenden Ausdruckskraft der Sprache gar nicht auftreten kann. Constraints sind eine sinnvolle Ergänzung (in C++ kann man sie bisher nur über Template-Metaprogrammierung simulieren), die restlichen Einschränkungen von Java Generics gegenüber C++ basieren aber nicht auf (angeblichen) Schwächen von C++-Templates, sondern Beschränkungen der Sprache "Java", und des dazugehörigen Runtime Supports. Ich werde den falschen und irreführenden Kommentar daher entfernen. Aragorn2 21:13, 26. Mär 2005 (CET)
Nochmal zur Klarheit: Im ersten Fall besitzt eine Template-Klasse eine virtuelle Methode. Das ist in C++ vollkommen zulässig. Im zweiten Fall besitzt eine Klasse (Template oder nicht) eine Schar von Methoden die über ein geschachteltes Template parameterisiert ist. Diese Methodenschar darf laut C++-Standard nicht "virtual" sein. Dieser Fall ist etwas völlig anderes als der erste, und ist mit Java nicht vergleichbar, weil es in Java zwar generische "Klassenscharen" gibt, aber keine "Funktionsscharen".
Zulässig ist es in C++ jedoch nachwievor, Klassen mit Scharen nicht-virtueller Methoden zu versehen, Beispiel:
template<class Encapsulated> class Encapsulate {
private:
    Encapsulated m_object;

public:
    template<class ConvertTo>
    operator ConvertTo() const {  // ok: Schar nicht-virtueller Methoden
        return m_object;
    }
};
Zu diesen dürfen auch wie üblich teilweise und vollständige Spezialisierungen angegeben werden. Eine derartige Funktionalität existiert in Java 5.0 nicht. Aragorn2 23:58, 26. Mär 2005 (CET)

Abschnitt Covarianz

Laut des Buches "Java ist auch eines Insel" gilt die genannte Vererbung im Abschnitt Covarianz nicht. Vielleicht verstehe ich hier auch etwas falsch, aber es liest sich im Artikel so, als würde aus T extends V automatisch Typ<T> extends Typ<V> folgen. Dies gilt jedoch nicht. In Java ist auch eine Insel steht:

"In Zusammenhang mit Generics und Vererbung muss beachtet werden, dass die übliche Substitution nicht funktioniert. Wenn Disko eine Unterklasse von Gebaeude ist, so ist Box<Disko> keine Unterklasse von Box<Gebaeude>, genauso wie Box<Object> nicht die Basisklasse von Box<Gebaeude> ist, beziehungsweise eine Box, die alle erdenklichen Typen ermöglicht.

Der Compiler meckert diesen Versuch sofort an.

Box<Object> box; box = new Box<Disko>(); // incompatible types"

Siehe hierzu http://www.galileocomputing.de/openbook/javainsel4/javainsel_06_012.htm#Rxx365java06012040001D41F0321BE Kapitel 6.13.3

Dieser Artikel ist kein Artikel!

Hallo,

dieser Artikel erklärt zwar wunderbar in allen Facetten auch sehr freundlich für Java-Neulinge die Implentierung eines generischen Konzeptes in Java 1.5 ("Java 5.0"), aber irgendwie fehlt mir was an dem Artikel. Ja genau, es ist einfach so: Dieser Artikel ist kein Artikel.

Laut Wikipedia:Wie_schreibe_ich_gute_Artikel#Aufbau_eines_Artikels: Ein Artikel braucht eine Einleitung. Der Begriff muss definiert werden. Bei diesem Artikel gibt es keinen Begriff, es gibt ein Thema. Der Artikel ist mehr ein wissenschaftlicher Aufsatz als ein Artikel.

In diesem Sinne: Ein hervorragender Beitrag, allerdings in der falschen Wiki. Ich finde, er wäre *deutlich* besser in Wikibooks aufgehoben, irgendwo im Regal Informatik. Sicherlich kommt ihm dort nicht so viel Aufmerksamkeit wie hier zu, aber die paar Links, die draufzeigen, lassen sich schnell umbiegen. So frech, den gesamten Inhalt zu entfernen werde ich allerdings nicht sein. Viel eher werde ich warten und auf eine Stellungnahme oder eine Diskussion reagieren.

Viele Grüße, --Benji 23:42, 31. Aug 2006 (CEST)

Meine Meinung. In Wikipedia hat sowas nichts zu suchen -- 84.167.196.85 15:56, 4. Okt. 2007 (CEST)Beantworten
sign, me too. Sonst kommt noch Fehlerbehandlung in Java 5.2 oder Grüne Fenster in Java 3.4-3.9 (Versionsnummern sind natürlich nur Beispiele *g*) --E7 19:33, 4. Okt. 2007 (CEST)Beantworten
Ich habe auf wikibooks:de:Java:Fast ToDo mal rumgefragt, ob jemand Interesse an dem Artikel hätte. Ich würde ihn dann zu Wikibooks rüberschieben. --Benji 20:31, 8. Sep. 2008 (CEST)Beantworten