Salut,
Je viens de tomber sur un truc un peu bizarre en java. Bizarre ou en tout cas que j'avais pas prévu dans mon design.
Code :
- package testiterator;
- import java.util.Iterator;
- public class Main
- {
- public static void main(String[] args)
- {
- new Ecrivain1Ligne().doIt( new Ligne() ); // Compile
- new Ecrivain().doIt( new Liste() ); // Compile pas
- }
- }
- interface CSVwritable
- {
- public String toRowCSV();
- }
- class Ligne implements CSVwritable
- {
- public String toRowCSV()
- {
- return "Test" ;
- }
- }
- class Liste implements Iterable<Ligne>
- {
- public Iterator<Ligne> iterator()
- {
- return new Iterator<Ligne>() {
- public boolean hasNext()
- {
- throw new UnsupportedOperationException("Not supported yet." );
- }
- public Ligne next()
- {
- throw new UnsupportedOperationException("Not supported yet." );
- }
- public void remove()
- {
- throw new UnsupportedOperationException("Not supported yet." );
- }
- };
- }
- }
- class Ecrivain
- {
- void doIt( Iterable<CSVwritable> c )
- {
- // void
- }
- }
- class Ecrivain1Ligne
- {
- void doIt( CSVwritable c )
- {
- // void
- }
- }
|
En gros je veux créer une méthode doIt( Iterable<CSVwritable> )
Les objets Ligne sont de type CSVwritable. Je créer un objet de type Iterable<Ligne> mais si j'essaye de le passer à mon doIt(), ça ne passe pas, j'ai une erreur à la compilation. Pourtant les Ligne sont bien des CSVwritable, ce que je vérifie avec l'autre doIt().
De quoi suis-je passé à côté ? Comment faire ce que je veux ?
---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry