generics : round two - Java - Programmation
Marsh Posté le 24-01-2005 à 18:23:31
à mon avis, quand tu écris public <Integer> void affiche(Integer t) { il prend Integer comme le nom d'un type générique, pas java.util.Integer comme tu le penses ... => il connait pas la méthode intValue()
T'as le droit d'hériter d'une classe en spécifiant le type d'une méthode générique ? ca me semble suspect ...
Marsh Posté le 24-01-2005 à 18:37:36
benou > +1
Les valeurs des variables de types pour les méthodes template sont inférés du contexte, comme en C++. (relis ça lentement)
edit : du contexte d'appel.
Marsh Posté le 25-01-2005 à 08:48:58
Ha d'accord
pigé pour la différence paramétrage de type et paramétrage de méthode !
Citation : T'as le droit d'hériter d'une classe en spécifiant le type d'une méthode générique ? ca me semble suspect ... |
Ha bon ?
Remarque, en y réfléchissant à deux fois, c'est vrai que c'est bizarre mon truc ...
En tout cas merci pour cet éclaircissement
Marsh Posté le 25-01-2005 à 09:13:06
bobuse a écrit :
|
Il me semble qu'effectivement Java ne gère pas l'équivalent des "Partial Template Specialization" de C++ (AMHA, c'est parce que toute méthode doit être dans une classe, et qui si on se mets à gerer les héritages partiels, on n'est pas sorti de l'auberge). Et toujours AMHA, c'est pas plus mal...
Quelqu'un peut confirmer/infirmer ?
Marsh Posté le 25-01-2005 à 09:14:54
Je confirme.
C'est la méthode qui est générique, et c'est à son appel qu'on la paramètre, pas en la sous-classant.
Marsh Posté le 25-01-2005 à 15:53:25
je squatte le topic, pour voir si qqun pourrait m'expliquer la difference entre
Collections.emptyList()
et
Collections.EMPTY_LIST
... le 2e devrait me sortir un warning pê ?
Marsh Posté le 25-01-2005 à 15:56:14
-- > oui.
au moment de l'appel de emptyList(), le type paramètre de la fonction est inféré correctement.
Marsh Posté le 25-01-2005 à 15:56:46
the real moins moins a écrit : je squatte le topic, pour voir si qqun pourrait m'expliquer la difference entre |
ben...
Citation : Implementation note: Implementations of this method need not create a separate List object for each call. Using this method is likely to have comparable cost to using the like-named field. (Unlike this method, the field does not provide type safety.) |
Marsh Posté le 25-01-2005 à 15:58:45
R3g > oué, à tous les coups ils renvoient EMPTY_LIST dans la fonction, mais c'est eux qui se sont pris le warning à la compilation du JDK
Marsh Posté le 25-01-2005 à 15:58:58
r3g: la partie interessante de la javadoc, c'était juste au dessus.
et c'est que je vois pas bien en quoi la type-safetiness pourrait apporter quoi que ce soit puisque la liste est vide.
Marsh Posté le 25-01-2005 à 15:59:14
nraynaud a écrit : R3g > oué, à tous les coups ils renvoient EMPTY_LIST dans la fonction, mais c'est eux qui se sont pris le warning à la compilation du JDK |
tout à fait, castée.
Marsh Posté le 25-01-2005 à 16:04:01
-- > le but des Generics, c'est de supprimer tous les casts et les convertions douteuses. Hors passer du raw type (List) au type paramétré (List<String> ) n'est statiquement pas safe.
Marsh Posté le 25-01-2005 à 16:05:02
the real moins moins a écrit : r3g: la partie interessante de la javadoc, c'était juste au dessus. |
Oui ça apporte pas grand chose, pour moi c'est une queztion de sémantique ; EMPTY_LIST est une List, emptyList renvoie une List<T>, c'est pas pareil c'est tout.
Marsh Posté le 25-01-2005 à 16:05:49
mouaif, en fait je soupçonne que c'est parce qu'ils ont pas genericés EmptyList:
|
non ?
si c'était <T> sur extends AbstractList ça roulerait non?
Marsh Posté le 24-01-2005 à 18:15:09
Allez, ma petite boulette de generics de la semaine
Voilà mon code (tout bête) :
Et eclipse me balance l'erreur indiquée.
Avec javac c'est pareil :
$javac TestGenerics.java
TestGenerics.java:47: cannot find symbol
symbol : method intValue()
location: class java.lang.Object
int i=t.intValue();
^
1 error
Le truc c'est que si je vire le <Integer>, il me dit que j'ai oublié d'implémenter la méthode abstraite
Dîtes-moi ce que j'ai oublié !
---------------
get amaroK plugin