Pourquoi ça compile pas ? Iterable<Interface> ?

Pourquoi ça compile pas ? Iterable<Interface> ? - Java - Programmation

Marsh Posté le 26-05-2010 à 21:12:32    

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 :
  1. package testiterator;
  2. import java.util.Iterator;
  3. public class Main
  4. {
  5.     public static void main(String[] args)
  6.     {
  7.         new Ecrivain1Ligne().doIt( new Ligne() ); // Compile
  8.         new Ecrivain().doIt( new Liste() ); // Compile pas
  9.     }
  10. }
  11. interface CSVwritable
  12. {
  13.     public String toRowCSV();
  14. }
  15. class Ligne implements CSVwritable
  16. {
  17.     public String toRowCSV()
  18.     {
  19.         return "Test" ;
  20.     }
  21. }
  22. class Liste implements Iterable<Ligne>
  23. {
  24.     public Iterator<Ligne> iterator()
  25.     {
  26.         return new Iterator<Ligne>() {
  27.             public boolean hasNext()
  28.             {
  29.                 throw new UnsupportedOperationException("Not supported yet." );
  30.             }
  31.             public Ligne next()
  32.             {
  33.                 throw new UnsupportedOperationException("Not supported yet." );
  34.             }
  35.             public void remove()
  36.             {
  37.                 throw new UnsupportedOperationException("Not supported yet." );
  38.             }
  39.         };
  40.     }
  41. }
  42. class Ecrivain
  43. {
  44.     void doIt( Iterable<CSVwritable> c )
  45.     {
  46.         // void
  47.     }
  48. }
  49. class Ecrivain1Ligne
  50. {
  51.     void doIt( CSVwritable c )
  52.     {
  53.         // void
  54.     }
  55. }


 
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
Reply

Marsh Posté le 26-05-2010 à 21:12:32   

Reply

Marsh Posté le 27-05-2010 à 10:19:52    

Bon j'ai eu ma réponse sur http://www.developpez.net/forums/d [...] e-qqchose/
 
Il fallait écrire : void doIt( Iterable<? extends CSVwritable> c )
 


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed