Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1437 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[java 1.5] problème de type

n°938449
benou
Posté le 05-01-2005 à 20:24:44  profilanswer
 

Reprise du message précédent :

the real moins moins a écrit :

idea est pas content en tous cas: "wildcards may only be used as reference parameters"


j'ai édité ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 05-01-2005 à 20:24:44  profilanswer
 

n°938451
the real m​oins moins
Posté le 05-01-2005 à 20:32:02  profilanswer
 

t'as oublié le return type [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938452
the real m​oins moins
Posté le 05-01-2005 à 20:32:59  profilanswer
 

nan, marche tjs pas


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938454
benou
Posté le 05-01-2005 à 20:33:55  profilanswer
 


[:sisicaivrai]


---------------
ma vie, mon oeuvre - HomePlayer
n°938470
nraynaud
lol
Posté le 05-01-2005 à 21:13:50  profilanswer
 

Harkonnen a écrit :

c'est exactement pour ça que j'aurais voulu que ça existe :jap:


 en java ça se fait pas comme ça l'optimisation.
la JVM le fait par boxing elimination et par monomorphic call specialisation.
quand il a fait les 2 il a ouvert la voie à toute la réécriture : inilining, CSE etc.  
 
Le tout en dynamique.

n°938473
benou
Posté le 05-01-2005 à 21:18:56  profilanswer
 

merci de faire des phrases compréhensibles par des humains :o


---------------
ma vie, mon oeuvre - HomePlayer
n°938501
nraynaud
lol
Posté le 05-01-2005 à 21:36:36  profilanswer
 

benou a écrit :

genre :

Code :
  1. public class TonGeneric<T extends Number> {
  2.    // fonction generaliste
  3.    public void f(T t) { ... };
  4.    // fonction optimisée pour les Integer et ses sous-classes
  5.    public <SI extends T & Integer> void f(SI i) { ... };
  6. }


 
nan ?
 
ca compile ca ? [:gratgrat]


 
-- > c'est quoi le message d'erreur ?
 
par contre, c'est pas une spécialisation au sens C++ car en C++ le layout de la classe peut être différent aussi.
 
et on ne fait pas de l'optimisation comme ça en java :o

n°938527
chrisbk
-
Posté le 05-01-2005 à 21:53:15  profilanswer
 

benou a écrit :

genre :

Code :
  1. public class TonGeneric<T extends Number> {
  2.    // fonction generaliste
  3.    public void f(T t) { ... };
  4.    // fonction optimisée pour les Integer et ses sous-classes
  5.    public <SI extends T & Integer> void f(SI i) { ... };
  6. }


 
nan ?
 
ca compile ca ? [:gratgrat]


 
ah les javeux sont rigolos, y'a un an tu leur parlais de generique, de specialisation ils et disaient que ca servaient a rien, que ca puait, que t'avais qu'a faire de l'objet et ta gueule(y'a object et les ClassCastException :o) et vla maintenant qu'ils s'urinent dessus de plaisir parce que Sun, (qu'ils idolatre tous de pitoyable facon) a enfin decider de se bouger le cul (en chiant une syntaxe deguelasse, evidemment, apres avoir attendu 10 ans en se tournant les pouces c'est un peu pas evident de refoutre des nouveaux mots clé dans un langage. Conclusion : ca boite mechamment, vouant ainsi Java a la disparation au profit de quelque chose de mieux pensé des le debut)
 
 
 
 
 

n°938577
push
/dev/random
Posté le 05-01-2005 à 22:23:47  profilanswer
 

chrisbk> après le coup de l'OS paléolithique, maintenant ça [:rofl]
 
garde en un peu pour le reste de l'année hein.

n°938582
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-01-2005 à 22:26:20  profilanswer
 

comment déclencher les passions avec une question toute con....[:petrus75]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
... et la spécialisation partielle de template, ça existe ?


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 05-01-2005 à 22:26:20  profilanswer
 

n°938585
chrisbk
-
Posté le 05-01-2005 à 22:27:42  profilanswer
 

mais je le pense, en plus [:icon9] les "ouahhh les templates du C++, c'est tout laid, pis ca pue", j'en ai lu, et maintenant regarde ce qu'ils ont [:el g] un truc aussi laid que du C++, mais moins puissant, et qu'et ce qu'ils font ?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
 
ca : [:tartragnan]

n°938595
chrisbk
-
Posté le 05-01-2005 à 22:34:28  profilanswer
 

benou a écrit :

merci de faire des phrases compréhensibles par des humains :o


 
 
CSE = Common Subexpression Elimination
 
autrement dit, tu degages les trucs qui se ressemble
 
exemple
 

Code :
  1. a <= b +c
  2. d <= b +c


 
se transformé en

Code :
  1. g <= b + c
  2. a <= g
  3. b <= g


 
tu gagnes en quantité de code, parfois en vitesse, mais tu risque de noyer ton cache de code, bref, y'a du pour y'a du contre. Dans le meme rayon d'idée y'a le Global Value Numbering, plus chiant a faire mais qui  donne de tres chouette resultat, en travaillant par congruence de variable (faut juste avoir un SSA sous la main)
 
l'interet de la chose c'est qu'apres si tu fous un global copy propagation (le prochaine utilisation de a sera remplacé par g, par exemple) tu pourras peut etre carrement supprimer a et b, diminuant la pression qu'aura a subir l'allocateur de registre.
 
Evidemment, des analyses de flow seront necessaire pour savoir ou faire un copy propagation valide.
 
inlining, tout le monde sait c'est quoi
 
monomorphing call spemachin, je connais pas, mais je suppose que c'est compiler plusieurs fois la meme fonction pour un type en entrée donné, histoire que ca bouste plus (en supprimant les appels indirect et permettant donc les optims sus-citée)


Message édité par chrisbk le 05-01-2005 à 22:39:05
n°938676
benou
Posté le 06-01-2005 à 00:09:16  profilanswer
 

sinon pour ta remarque chkribsq, je suis plutot d'accord avec toi.
 
perso, je connais pas les generics du C++, je les ai à peine aperçu, donc je peux pas les critiquer. Les generics java me font un peu peur : c'est sensé être là pour rendre le code plus clair et plus facile à écrire, mais je crains que ce soit l'inverse qui se produise (cf le prob de notre amis posteur et la gueule de la javadoc de java.util.Collections).
 
Pour autant, avant de geuler, je préfère tester, donc ca m'intéresse bien de regarder comment ca fonctionne, de voir les problèmes, mais aussi les avantages qu'on peut en tirer ...  
 
voila voila ... je pouvais pas laisser passer un aussi joli troll sans réagir, ca aurait été du gachi :D
 
edit : et merci pour la traduction nraynaud->humain  (même si j'ai pas encore tout compris, mais c'est pas grave [:petrus75]}


Message édité par benou le 06-01-2005 à 00:10:04

---------------
ma vie, mon oeuvre - HomePlayer
n°938682
the real m​oins moins
Posté le 06-01-2005 à 00:16:23  profilanswer
 

benou >> niveau *utilisation* ça roxxe total en tous cas. merde, plus de cast, plus d'iterator a la con (foreach), y'a pas photo.
apres niveau syntaxe, c'est pas facile. spa une raison pour faire des patés à un chrisbk qui semble visiblement s'ennuyer aujourd'hui. :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938728
chrisbk
-
Posté le 06-01-2005 à 08:12:29  profilanswer
 

the real moins moins a écrit :

benou >> niveau *utilisation* ça roxxe total en tous cas. merde, plus de cast, plus d'iterator a la con (foreach), y'a pas photo.:o


 
 
cbien de fois je vous l'ai repeté l'an dernier [:el g]
FAIS DE L'OBJET !

n°938732
nraynaud
lol
Posté le 06-01-2005 à 08:27:05  profilanswer
 

chrisbk > les generics ne sont pas des templates, un generic java c'est bien typé *en soi* et ça ne sert qu'à faire du code générique, ce n'est pas la même chose.
 
benou > oui, les generics mettent au jour des dépendances auxquelles personne ne pensait avant, on va dans le sens de plus d'analyse du code et plus de sécurité. Mais aussi dans le sens de plus de noobs casse-couilles.

n°938810
bobuse
Posté le 06-01-2005 à 09:50:46  profilanswer
 

benou> voici l'erreur :
The type Integer is not an interface; it cannot be specified as a bounded  
 parameter
 
pour l'intérêt des generics, je dirai comme --, ça peut rendre un code tout pourri, mais à faible dose ça rend bien service.
Parce que les Collection d'Object c'est bien, mais qu'est-ce qu'il faut pas se coltiner comme protection pour être sûr de pas corrompre la collection et du coup on allourdi le code pour rien.
 
Je dirai que c'est comme d'autre technos (les Exceptions, ...) c'est pratique mais va pas vouloir faire que de ça !

n°938815
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-01-2005 à 09:56:46  profilanswer
 

sinon, y'a un équivalent Java de dynamic_cast ? [:cupralf]

n°938822
chrisbk
-
Posté le 06-01-2005 à 10:06:33  profilanswer
 

Harkonnen a écrit :

sinon, y'a un équivalent Java de dynamic_cast ? [:cupralf]


 
 
ski faut pas lire [:el g]
 

n°938849
bobuse
Posté le 06-01-2005 à 10:37:34  profilanswer
 

Harkonnen a écrit :

sinon, y'a un équivalent Java de dynamic_cast ? [:cupralf]


quel est son intérêt ?
J'ai jamais utilisé ça :??:


Message édité par bobuse le 06-01-2005 à 10:38:01
n°938852
chrisbk
-
Posté le 06-01-2005 à 10:39:52  profilanswer
 

bobuse a écrit :

quel est son intérêt ?
J'ai jamais utilisé ça :??:


 
 
le dynamic_cast du C++ == le cast du java
 
bravo harko [:el g]

n°938857
bobuse
Posté le 06-01-2005 à 10:41:56  profilanswer
 

chrisbk> ha d'accord ! ça part en troll, stou ...

n°938860
benou
Posté le 06-01-2005 à 10:46:53  profilanswer
 

bobuse a écrit :

chrisbk> ha d'accord ! ça part en troll, stou ...


ouais, ca va TT si ca continue :o


---------------
ma vie, mon oeuvre - HomePlayer
n°938861
chrisbk
-
Posté le 06-01-2005 à 10:47:45  profilanswer
 

benou a écrit :

ouais, ca va TT si ca continue :o


 
j'ai pas vu de troll dans la question d'harko, juste une question con[:el g]

n°938862
benou
Posté le 06-01-2005 à 10:47:55  profilanswer
 

bobuse a écrit :

benou> voici l'erreur :
The type Integer is not an interface; it cannot be specified as a bounded parameter


bha, tiens ... pkoi on pourrait pas bounder avec une classe  :??:


---------------
ma vie, mon oeuvre - HomePlayer
n°938877
nraynaud
lol
Posté le 06-01-2005 à 10:55:39  profilanswer
 

parce que l'erasure réelle sera une interface qui va étendre toutes les bounds ?  
 
(j'ai pas la spec là pour vérifier)

n°938880
benou
Posté le 06-01-2005 à 10:56:46  profilanswer
 

bon, je continuerai à poster dans ce topic après avoir lu la doc [:mmmfff]


---------------
ma vie, mon oeuvre - HomePlayer
n°938903
bobuse
Posté le 06-01-2005 à 11:12:53  profilanswer
 

benou> Entre nous l'exemple serait-il pas un peu foireux ?
car Integer hérite bien de Number ? donc à quoi bon vouloir que SI soit un sous-type de T (qui est un sous-type de Number) et de Integer ?
<SI extends Integer> suffit ? non ?


Message édité par bobuse le 06-01-2005 à 11:13:24

---------------
get amaroK plugin
n°938920
benou
Posté le 06-01-2005 à 11:25:13  profilanswer
 

bobuse a écrit :


<SI extends Integer> suffit ? non ?


c'était pour le cas où tu utilisais une sous-classe de Integer comme type générique, mais j'avais aucune certitude sur le fait que ca fonctionne ...


---------------
ma vie, mon oeuvre - HomePlayer
n°938940
the real m​oins moins
Posté le 06-01-2005 à 11:38:41  profilanswer
 

chrisbk a écrit :


FAIS DE L'OBJET !

[:rofl]
 
 
([:xp1700] j'avoue - mais les trucs dont je parle là sont fortement typés c tres objet :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938941
the real m​oins moins
Posté le 06-01-2005 à 11:39:20  profilanswer
 

bobuse a écrit :


pour l'intérêt des generics, je dirai comme --, ça peut rendre un code tout pourri, mais à faible dose ça rend bien service.
Parce que les Collection d'Object c'est bien, mais qu'est-ce qu'il faut pas se coltiner comme protection pour être sûr de pas corrompre la collection et du coup on allourdi le code pour rien.


c'est sympa aussi sur un ThreadLocal [:cupralf]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°938942
the real m​oins moins
Posté le 06-01-2005 à 11:39:41  profilanswer
 

benou a écrit :

ouais, ca va TT si ca continue :o


 :bounce:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°939068
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-01-2005 à 13:54:52  profilanswer
 

bobuse a écrit :

quel est son intérêt ?
J'ai jamais utilisé ça :??:


\o/


---------------
J'ai un string dans l'array (Paris Hilton)
n°939069
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-01-2005 à 13:55:30  profilanswer
 

chrisbk a écrit :

j'ai pas vu de troll dans la question d'harko, juste une question con[:el g]


si si, c'en était un [:petrus75]


---------------
J'ai un string dans l'array (Paris Hilton)
n°939098
Giz
Posté le 06-01-2005 à 14:15:56  profilanswer
 

bobuse a écrit :

Ben en changeant  
 

grapheIdeaux(DirectedGraphMap<? extends Set<T>,V> g)


 
en
 

grapheIdeaux(DirectedGraphMap<Set<T>,V> g)


 
ça devrait le faire ... à voir en fonction des autres contraintes que je ne peux pas deviner, mais j'imagine que ce ? extends Set<T> n'est pas là par hasard :/

benou a écrit :

trop restrictif : tu n'acceptes plus que les Set<T> et pas les ArrayList<T> par exemple :/


 
 
 
T1 j'ai du me coltiner les 70 posts !  :ouch: .
 
 
 
Bon dejà Benou, ton exemple avec les ArrayList est un peu pourri car ArrayList n'implemente meme pas l'interface Set . Bref c'est un détail.
 
 
 
Sinon pour bobuse, effectivement j'ai essaié comme tu as dis, c'est à dire au lieu de mettre la signature  
 

Code :
  1. static<T,V> DirectedGraphMap<Set<T>,Set<T>>
  2.         grapheIdeaux(DirectedGraphMap<? extends Set<T>,V> g);


 
 
 
j'ai mis  
 

Code :
  1. static<T,V> DirectedGraphMap<Set<T>,Set<T>>
  2.         grapheIdeaux(DirectedGraphMap<Set<T>,V> g);


 
 
 
Comme de toute façon je n'utilise que les méthodes de l'interface Set, je me dis OK, ca fera l'affaire pareil.
 
Donc si je réécris mon code de la fonction "grapheIdeaux" ça me donne (je vire simplement tous les "? extends":
 

Code :
  1. static<T,V> DirectedGraphMap<Set<T>,Set<T>>
  2.         grapheIdeaux(DirectedGraphMap<Set<T>,V> g) {
  3.             //OK  
  4.             ArrayList<Set<T>> topoSort;
  5.             //OK  
  6.             topoSort = topologicSort(g);
  7.             //OK  
  8.             Iterator<Set<T>> topoIt = topoSort.iterator();
  9.             //OK  
  10.         while(topoIt.hasNext()) {
  11.                 //OK  
  12.             Set<T> node = topoIt.next();
  13.                 //OK
  14.             Iterator<Set<T>> pred = g.keySet(node, false).iterator();
  15.                 ...
  16.             }
  17. }


 
 
 
et maintenant tout compile ;). MAIS...
 
De retour dans mon main j'écris :
 
 
 

Code :
  1. public static void main(String args[]) {
  2.        
  3.         //allocation du graph
  4.         DSGraphMap<TreeSet<Integer>,Integer> graph = null;
  5.         try {
  6.             graph = new    DSGraphMap<TreeSet<Integer>,Integer>("java.util.HashMap","java.util.HashMap","java.util.HashMap" );
  7.         } catch (ClassNotFoundException exc) {} catch (InstantiationException exc) {} catch (IllegalAccessException exc) {};
  8.         ...
  9.         //eh la ca merde !
  10.         GraphMapUtil.grapheIdeaux(graph);
  11.         ...
  12. }


 
Bref, mon main compile plus : message d'erreur :


/Net/mahonet/Utilisateurs/ffournel/m1/java/Graph/src/graph/DSGraphMap.java:385: <T,V>grapheIdeaux(graph.DirectedGraphMap<java.util.Set<T>,V> ) in graph.GraphMapUtil cannot be applied to (graph.DSGraphMap<java.util.TreeSet<java.lang.Integer>,java.lang.Integer> )
    GraphMapUtil.grapheIdeaux(graph)


 
et le pire c'est que je ne comprends pas pourquoi parce que ma clé "TreeSet<Integer>" est bien un "Set" que je sache  :heink: .
 
Par contre si je remets ma cle avec "? extends Set<T>", au prototype de départ de la fonction grapheIdeaux, mon main passe :D.
 
Pour information, voici la signature de topologicSort() :

Code :
  1. static<K,V> ArrayList<K> topologicSort(DirectedGraphMap<K,V> g);


 
Bref, j'attends toujours une proposition comment résoudre cette merde :/

n°939106
Giz
Posté le 06-01-2005 à 14:21:01  profilanswer
 

benou a écrit :

bon, je continuerai à poster dans ce topic après avoir lu la doc [:mmmfff]


 
 
Je l'ai toute lue ta doc sur les generic-type meme celle aussi de developpez.com. Le problème c'est que ces docs ne vont pas loin du tout a mon gout ! En gros elles se contentent d'expliquer seulement les generic sur des cas trivial. Sorti de la, la doc te dis d'aller voir ailleurs pour kkchose de plus pointu sur les generic :/ dommage.

n°939140
benou
Posté le 06-01-2005 à 14:38:23  profilanswer
 

Giz a écrit :

Bref, j'attends toujours une proposition comment résoudre cette merde :/


ben ma solution a moi doit fonctionner ... comme je le disais, la solution de Bobuse est trop restrictive : elle ne marche qu'avec des Set<T> => tu ne peux pas l'utiliser avec un TreeSet<T>.
 
et c'est vrai pour mon exemple avec la ArrayList, mais t'as compris ce que je voulais dire : si tu utilises une classe de Set (ce que tu fais), tu t'aperçois que ca marche pas [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
n°939141
benou
Posté le 06-01-2005 à 14:39:26  profilanswer
 

Giz a écrit :

Je l'ai toute lue ta doc sur les generic-type meme celle aussi de developpez.com. Le problème c'est que ces docs ne vont pas loin du tout a mon gout ! En gros elles se contentent d'expliquer seulement les generic sur des cas trivial. Sorti de la, la doc te dis d'aller voir ailleurs pour kkchose de plus pointu sur les generic :/ dommage.


ben pourtant je crois bien avoir compris ton problême en lisant les premiers chapitres de cette doc, moi  :sweat:  
 
teste mon truc (avec le type générique B), je pense vraiment que ca doit passer !!


---------------
ma vie, mon oeuvre - HomePlayer
n°939146
bobuse
Posté le 06-01-2005 à 14:43:29  profilanswer
 

Giz a écrit :


Bref, mon main compile plus : message d'erreur :


/Net/mahonet/Utilisateurs/ffournel/m1/java/Graph/src/graph/DSGraphMap.java:385: <T,V>grapheIdeaux(graph.DirectedGraphMap<java.util.Set<T>,V> ) in graph.GraphMapUtil cannot be applied to (graph.DSGraphMap<java.util.TreeSet<java.lang.Integer>,java.lang.Integer> )
    GraphMapUtil.grapheIdeaux(graph)


 
et le pire c'est que je ne comprends pas pourquoi parce que ma clé "TreeSet<Integer>" est bien un "Set" que je sache  :heink: .


 
Tu ne peux pas !
section 3 du tut de sun (page 4)
section "les generics ne sont pas des templates" du tut de dev.com
un objet de type (uneClasse<A> ) ne peut pas être affecté à une variable de type (uneClasse<B> ), même si A hérite de B.


Message édité par bobuse le 06-01-2005 à 14:44:14

---------------
get amaroK plugin
n°939493
benou
Posté le 06-01-2005 à 17:41:29  profilanswer
 

ca marche mon truc ou pas ? [:sisicaivrai]


---------------
ma vie, mon oeuvre - HomePlayer
n°939550
bobuse
Posté le 06-01-2005 à 18:33:08  profilanswer
 

ha ba oui, parce que moi sinon je récupère mes patates :o


---------------
get amaroK plugin
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Problème evenement clavier sous fire fox.Découper une image en java
[OpenGL] Probleme avec le rouge ... [resolu][JAVA] Plus haut niveau que les socket
[RESOLU]problème de récupération de dateProblème TextArea + Javascript
Conseil ->Quel type de serveur pour une base MySQL?problème avec fichier .htaccess
Problème d'affichage des enregistrements dans un DataReport VB6[Java] Problème avec le type long
Plus de sujets relatifs à : [java 1.5] problème de type


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR