Je suis en train de mettre à jour du code vers Java 5 et je ne comprends vraiment pas quelque chose avec Generics. J'ai d'autres classes qui implémentent une fois comparable, que j'ai pu mettre en place. Mais maintenant j'ai une classe qui, en raison de l'héritage, finit par essayer d'implémenter Comparable pour 2 types. Voici ma situation:Comment puis-je implémenter Comparable plus d'une fois?
J'ai les classes/interfaces suivantes:
interface Foo extends Comparable<Foo>
interface Bar extends Comparable<Bar>
abstract class BarDescription implements Bar
class FooBar extends BarDescription implements Foo
Avec cela, je reçois l'erreur 'interface Comparable ne peut pas être mis en œuvre plus d'une fois avec des arguments différents ...'
Pourquoi ne puis-je pas avoir un compareTo (Foo foo) implémenté dans FooBar, et aussi un compareTo (Bar) implémenté dans BarDescription? N'est-ce pas simplement une méthode surchargée?
Modifier: J'ai de nombreuses classes qui étendent BarDescription. Si je supprime le paramètre type pour Comparable sur Bar, le laissant à l'état brut, alors je reçois un tas d'avertissements du compilateur lors du tri de toutes les classes qui étendent BarDescription. Serait-ce résolu avec les réponses wildcards ci-dessous? Cette réponse semble assez compliquée et difficile à comprendre pour la maintenance.
Même question, cas différent. Vous cherchez quelque chose appelé effacement de type. – falstro
@row Quelque chose appelé wildcards. –
@ codeman73: mais vous ne pouvez tout simplement pas le faire en Java ... Java ne supporte pas le vrai polymorphisme paramétrique. C'est pourquoi lorsque vous vous concentrez sur "OO" au lieu de "Java idiosynchrasies" les génériques Java sont pour la plupart inutiles: bien sûr, ils sont bien pour les "collections" et pour le programme procédural (et donc bien la mentalité de 99% des Développeurs Java là-bas) mais ce n'est tout simplement pas OO du tout. C'est mon plus gros reproche avec les génériques en Java: vous ne pouvez pas avoir à la fois * Handeable * et * Handizable * et cela rend les génériques ** inutiles ** du point de vue OO. –
SyntaxT3rr0r