[Java 1.5] Encore du générique...

Encore du générique... [Java 1.5] - Java - Programmation

Marsh Posté le 02-06-2005 à 13:17:45    

Salut les javateux :hello:,
 
2 questions qui me turlupinent : 1 technique et une qui m'inquiète.
 
Rq : je code sous eclipse, et les warning qu'il me souligne j'évite :o
 
 
--------------------------------------------------------------------------------
-----------------1) celle qui m'inquiète :--------------------------------
--------------------------------------------------------------------------------
 
 
Soit le code suivant :

Code :
  1. ArrayList<_State<T>> sortSuccessors(BasicSearch<T> problem) {
  2. ArrayList<_State<T>> successors = successors(problem);
  3. Object[] sortedSucc = successors.toArray();
  4. Arrays.sort(sortedSucc);
  5. successors.clear();
  6. for (Object o : sortedSucc)
  7.  //ci-dessous warning sur le cast
  8.  successors.add((_State<T> ) o);
  9. return successors;
  10. }


 
On se dit "Avec Tiger génial, plus de cast tout merdique !" Seulement pour les qsort (cf. exemple) c'est pas encore ça et pour les clone() non plus.
Serons-nous donc toujours contraint à avoir un code avec des warning et des cast ? :sweat:
 
 
--------------------------------------------------------------------------------
-----------------2) Question technique.-----------------------------------------
--------------------------------------------------------------------------------
 
 
Voici le bout de code qui ne compile pas :
 

Code :
  1. /********** Fichier AntColonySystem.java ***************/
  2. public class AntColonySystem<T> extends AntProcess<T> {
  3. ...
  4. //constructeur
  5. public AntColonySystem(AntColonySystemProperty<T> acsp, AntSearch<T> problem) {
  6.  pheromone = new Hashtable<T,Hashtable<T,Double>>();
  7.  this.acsp = acsp;
  8.  this.problem = problem;
  9. }
  10. //methode d'intialisation
  11. void init() {
  12.  //acsp.colony est souligne comme erreur !
  13.  for (AntSystemProperty<T>.Ant<T> ant : acsp.colony) {
  14.   ant.clearPath();
  15.   ant.addToPath(problem.random());
  16.  }
  17. }
  18. ...
  19. }


 


 
/********** Message d'erreur ***************/
Type mismatch: cannot convert from element type AntSystemProperty.Ant<T> to AntSystemProperty<T>.Ant<T> AntColonySystem.java
 


 

Code :
  1. /********** Fichier AntSearch.java ***************/
  2. public interface AntSearch<T> {
  3. ...
  4. }


 

Code :
  1. /********** Fichier AntColonySystemProperty.java ***************/
  2. public class AntColonySystemProperty<T> extends AntSystemProperty<T> {
  3. //constructeur
  4. public AntColonySystemProperty(int cListSize, AntSystemProperty<T> asp) {
  5.  super(asp);
  6.  this.cListSize = cListSize;
  7. }
  8. ...
  9. }


 

Code :
  1. /********** Fichier AntSystemProperty.java ***************/
  2. public class AntSystemProperty<T> {
  3. ...
  4. //une donnee membre
  5. ArrayList<Ant<T>> colony;
  6. ...
  7. //constructeur 1 qui me parait un peu cracra, mais
  8. //je ne vois pas comment faire autrement vis a vis
  9. //de l'heritage avec la sous classe AntColonySystemProperty
  10. //(cf son constructeur)
  11. AntSystemProperty(AntSystemProperty<T> asp) {
  12.  ...
  13. }
  14. ...
  15. //classe interne avec E meme type que T en fait mais
  16. //oblige de mettre une autre lettre a cause du masquage avec
  17. //la classe externe sinon (=> warning).
  18. class Ant<E extends T> {
  19.  ...
  20.  //constructeur
  21.  Ant() {
  22.   ...
  23.  }
  24.  ...
  25. }
  26. }


 
Bon voilà pour ce qui est du code. Je suis désolé mais je pense que vous avez besoin de tout ce listing pour comprendre, je sais c'est beaucoup, abstraction oblige [:spamafote].
Ben la question, vous avez devinez, pourquoi cette erreur ? [:gratgrat] et surtout quelle(s) modification(s) du code proposez vous pour corriger ca sans "trop" casser "la conception" et garder un typage sûr ! :D.
 
Merci ;).

Reply

Marsh Posté le 02-06-2005 à 13:17:45   

Reply

Marsh Posté le 03-06-2005 à 23:14:53    

pour le 2) faut que tu mettes  

Citation :

for (AntSystemProperty.Ant<T> ant : acsp.colony)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2005 à 02:10:18    

et pour la premiere tu devrais sans doute utiliser la methode toArray qui prend un argument...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2005 à 02:13:58    

j'aimerais bien ^savoir le message de warning du 1er ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2005 à 02:15:21    

unsafe cast je suppose?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2005 à 02:16:02    

(puisque sortedSucc est juste une Object[], pas une Machin[])


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2005 à 02:17:35    

the real moins moins a écrit :

unsafe cast je suppose?


depuis quand y a ce genre de warning en java  :??:
 
et c'est quoi un cast "safe" ?


Message édité par benou le 04-06-2005 à 02:18:05

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2005 à 02:18:44    

ben en java5, me semble qu'y'a ça, genre pour te prevenir que tu pourrais faire plus safe.
maintenant, je suis pas du tout sur de l'intitulé du message ...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2005 à 02:20:08    

benou a écrit :

et c'est quoi un cast "safe" ?


beuf, joue pas sur les mots :p c'est le cast en soi qui est unsafe(pas "type safe" )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2005 à 02:21:45    

the real moins moins a écrit :

ben en java5, me semble qu'y'a ça, genre pour te prevenir que tu pourrais faire plus safe.


ok  :jap:  
(vivement qu'ils y passent dans ma boite  :fou: )
 
 

the real moins moins a écrit :

beuf, joue pas sur les mots :p c'est le cast en soi qui est unsafe(pas "type safe" )


 c'est pour ca que je comprenais pas ce que c'était qu'un "cast safe", c'est jamais safe un cast :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2005 à 02:21:45   

Reply

Marsh Posté le 04-06-2005 à 02:22:51    

oué [:joce]
 
(je suis pas sur pour le warn mais il me semble qu'y'en a un qui dit qqchose dans le style quoi)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 05-06-2005 à 23:40:32    

the real moins moins a écrit :

et pour la premiere tu devrais sans doute utiliser la methode toArray qui prend un argument...


 
celle-là tu veux dire :

Code :
  1. public <T> T[] toArray(T[] a);


 
mais dans la doc il disent bien que :

Citation :

Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.


 
...Et l'allocation de tableaux generiques, c'est pas possible :sweat: donc c'est mort cette méthode car je ne peux allouer moi-même le tableau et a fortiori la fonction non plus (elle ne pourra pas le créer).

Reply

Marsh Posté le 06-06-2005 à 00:30:19    

je détourne un peu la question :  
pkoi tu te sers pas de cette méthode là pour faire un sort ?
Ca t'évite de passer par des tableaux qui, d'après ce que j'ai lu rapidement, foutent un peu la merde avec les generics ...
 


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 06-06-2005 à 00:50:45    

benou a écrit :

je détourne un peu la question :  
pkoi tu te sers pas de cette méthode là pour faire un sort ?
Ca t'évite de passer par des tableaux qui, d'après ce que j'ai lu rapidement, foutent un peu la merde avec les generics ...


 
Bon conseil ça tient ! tu me l'a sortie de derrière les bois celle là ... je ne la connaissais pas  [:ke-c] !
Sinon à ce qu'ils disent, ça doit certainement faire la même chose que moi (v aller voir le code...)...mais c'est clair qu'entre 5 lignes de code et une seule, je préfère largement ta méthode ;).
 
Merci  :jap:

Reply

Marsh Posté le 06-06-2005 à 02:26:03    

benou a écrit :

et c'est quoi un cast "safe" ?


C'est décrit très en détail dans le draft du JLS version 3 (attention, la version 3, pas la 2), c'est trop long pour faire un résumé ici, désolé.


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

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