[RESOLU] pb de "unchecked conversion" avec generic

pb de "unchecked conversion" avec generic [RESOLU] - Java - Programmation

Marsh Posté le 28-10-2005 à 21:18:27    

Salut,
voici une méthode qui implémente celle d'une classe abstraite (donc sans BufferedReader dans le prototype) :
 

Code :
  1. protected void setInput(LinkedList input) {
  2.     try {
  3.         BufferedReader br=(BufferedReader)(input.get(0));
  4.         this.input=input;
  5.     }
  6.     catch (ClassCastException e) { this.input=null; }
  7. }


la compilation avec l'option -Xlint me dit :
 


(...) warning: [unchecked] unchecked conversion
found   : java.util.LinkedList
required: java.util.LinkedList<java.io.BufferedReader>
            this.input=input;
                       ^


et même chose lorsque je faisais le cast avec :
this.input=LinkedList<BufferedReader>input;
 
est-ce vraiment grave vu que je teste le cast avant ?
et sinon, comment éliminer le warning ?
vu qu'au dela de l'utilisation la plus simple qui consiste à pas faire de class cast, j'ai du mal avec les generic
et que je ne peux pas simplement overrider avec : protected void setInput(LinkedList<BufferedReader> input) { ... }


Message édité par TheRom_S le 29-10-2005 à 08:40:33

---------------
The Rom's, à votre service
Reply

Marsh Posté le 28-10-2005 à 21:18:27   

Reply

Marsh Posté le 28-10-2005 à 21:53:11    

Et avec une LinkedList<? extends BufferedReader>   ?
 
PS : ta meme plus besoin de caster avec ça d'ailleurs.


Message édité par Chronoklazm le 28-10-2005 à 22:17:11

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 29-10-2005 à 00:42:39    

Non ma classe abstraite a besoin de garder le proto sans aucun rapport à BufferedReader
donc LinkedList et pas LinkedList<n'importe quel rapport à BufferedReader>
car une deuxième classe dérivée utilise LinkedList<org.xml.sax.InputSource>
et une troisième ???
en fait, mes sources sont tellement différentes ( crées à partir de Socket.getInputStream() ) que je me suis mis à utiliser un LinkedList pour pouvoir dériver ma classe abstraite et n'avoir qu'un problème de cast à gérer
 
d'ailleurs, si y'a moyen de virer LinkedList, je suis preneur (mais sans utiliser la classe Object come type de retour)


---------------
The Rom's, à votre service
Reply

Marsh Posté le 29-10-2005 à 08:07:48    

sinon, après quelques manipulations j'arrive à un truc superbe : une erreur de compilation qui me dit que
 


(...) incompatible types
found   : java.util.LinkedList<java.io.BufferedReader>
required: java.util.LinkedList<BufferedReader>
    protected <BufferedReader> LinkedList<BufferedReader> getInput() { return th
is.input; }
                                                                              ^


je précise que, ce qui est merveilleux, c'est que, jamais de la vie, je n'ai utilisé un BufferedReader qui ne viennes pas du package java.io, forcément :D
voila j'avais juste envie de vous faire partager ...
(ici le proto abstrait est "<T> LinkedList<T> getInput();" )


Message édité par TheRom_S le 29-10-2005 à 08:09:27

---------------
The Rom's, à votre service
Reply

Marsh Posté le 29-10-2005 à 08:40:02    

Bon c'est résolu avec :

Code :
  1. public abstract class MyAbstract<T1,T2> {
  2.     protected LinkedList<T1> input;
  3.     protected LinkedList<T2> output;
  4.     protected abstract LinkedList<T1> getInput();
  5.     protected abstract void setInput(LinkedList<T1> input);
  6.     protected abstract LinkedList<T2> getOutput();
  7.     protected abstract void setOutput(LinkedList<T2> output);
  8. }
  9. public class MyClass extends MyAbstract<BufferedReader,PrintWriter> {
  10.     protected LinkedList<BufferedReader> input;
  11.     protected LinkedList<PrintWriter> output;
  12.     protected LinkedList<BufferedReader> getInput() { return this.input; }
  13.     protected void setInput(LinkedList<BufferedReader> input) { this.input=input; }
  14.     protected LinkedList<PrintWriter> getOutput() { return this.output; }
  15.     protected void setOutput(LinkedList<PrintWriter> output) { this.output=output; }
  16. }


du coup je me demande même si j'ai vraiment besoin que mes méthodes soit abstraites ...
 
EDIT : et la réponse est non (même si je comprends toujours pas grand chose aux generics et à ce que j'ai codé, pas grave ca marche  :sarcastic: )


Message édité par TheRom_S le 29-10-2005 à 08:44:53

---------------
The Rom's, à votre service
Reply

Sujets relatifs:

Leave a Replay

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