Bonjour à tous,
Quotidiennement, je contribue à un projet open-source qui utilise massivement les génériques et je dois me plier à une pratique qui me semble bizarre. J'aurais aimé l'avis de la communauté. Voici un bout de mon code pour illustrer mes propos :
Nous possédons 2 interfaces dans des fichiers différents :
1 2 3 | public interface CtStatement {} public interface CtBlock extends CtStatement {} |
Nous possédons maintenant une classe (et son interface) qui va utiliser ces interfaces :
1 2 3 4 5 6 7 8 9 10 11 12 | public interface CtIf extends CtStatement { <S extends CtStatement> S getElse(); } public class CtIfImpl extends CtStatementImpl implements CtIf { CtStatement elseStatement; @Override public <S extends CtStatement> S getElse() { return (S) elseStatement; // cast obligatoire } } |
Ma question est la suivante :
Pourquoi suis-je obligé de caster mon elseStatement
alors qu'il est typé avec un type compatible par rapport à la déclaration du type de la méthode ?
Si vous savez m'éclairer, je suis preneur.
+0
-0