Diskussion:Generische Programmierung in Java
Erscheinungsbild
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)