template c++ -> Java - Java - Programmation
Marsh Posté le 04-04-2008 à 23:02:00
Bah normal t'as une classe dans laquelle tu appelle une méthode instance() qui n'existe pas.
En plus ca ne sert a rien de mettre un ";" dans une méthode ou aucun code n'est écrit.
De plus tu n'as pas de constructeur dans ta classe (A part celui hérité d'object).
Sinon un lien sur la différence entre template et type generics http://lroux.developpez.com/articl [...] esGenerics
Pour le reste je ne comprend pas le C++ donc je ne peux t'être d'une grande aide.
Marsh Posté le 05-04-2008 à 10:19:33
Anonymouse a écrit : |
Apparemment tune sais pas ce qu'est un singleton non plus
Marsh Posté le 05-04-2008 à 10:31:00
Joel F a écrit : |
Singleton permet de n'avoir qu'une seul instanciation d'objet.
En quoi ta remarque est pertinente?
De plus je ne sais pas comment tu implémente le design pattern singleton mais sans variable static et sans constructeur tu dois avoir une méthode bien spécial pour le faire.
Code :
|
Bien entendu l'extrait de code ci-dessus ne respecte pas le design pattern singleton en environnement mono-thread et bien entendu il n'as pas de constructeur !!!
Marsh Posté le 05-04-2008 à 10:34:57
ReplyMarsh Posté le 05-04-2008 à 10:42:10
Joel F a écrit : bah, ça me semble logique qu'elle n'ai pas de constructeur public en gros |
Bah ouais mais faire une classe sans constructeur même privé de cette façon j'en vois pas l'intérêt.
De plus ai-je dit: "tu n'as pas de constructeur public" bah nan j'ai dit qu'elle en avait pas.
Marsh Posté le 07-04-2008 à 15:58:33
dans le code c++ initial il n'y a pas non plus de constructeur etc et ca fonctionne apparement.
je ne suis pas forte ni en c++ ni en java et donc je galere.
je ne vois pas comment faire pour que mon singleton fonctionne
Marsh Posté le 08-04-2008 à 08:53:11
Comme l'a dit anonymouse il faut que tu déclare une méthode instance
Marsh Posté le 11-04-2008 à 11:22:36
Si je peux me permettre, tout ceci n'a guère de sens. En fait, ce n'est pas vraiment traduisible en Java. La manière d'écrire les singletons en Java est nettement plus simple qu'en C++ (même multi-thread-safe ; et en l'occurrence, l'écriture est plus simple que ce qu'a écrit Anonymouse). Elle est tellement simple qu'elle rend inutilement complexe toute tentative de factoriser le code de création du singleton.
Si on essaie de le faire quand même, voici ce que ça donne, étape par étape, et on verra là où ça va finir par coincer.
Le truc fondamental avec les templates C++, c'est que le compilateur pioche dans le code template pour ne compiler que ce dont il a besoin. Si une classe template n'est pas utilisée, il ne la compile pas. Si une classe template utilisée a une de ses méthodes qui n'est pas utilisée, il ne compile pas cette dernière. Et surtout, on peut faire des suppositions sur les types templates (ici, il existe une méthode instance() sur le type T) sans le dire vraiment. On peut donc tout à fait écrire du code template C++ qui ne compile pas (en tout cas pas tout seul), alors même que le compilateur C++ n'affiche aucune erreur à la compilation.
En Java, le compilateur compile toujours l'intégralité des classes génériques. Il vérifie donc la syntaxe de tout leur code. Et en plus, il faut impérativement dire ce qu'on suppose sur les types génériques.
Ainsi, si on suppose que le type T possède une opération instance(), il faut écrire un truc du genre :
Code :
|
Le problème ensuite pour traduire ton code de C++ en Java, c'est qu'on se retrouve face à une autre limitation des génériques Java : dans la version C++, l'opération instance() sur T est statique ; c'est donc une opération qui porte sur la classe T elle-même, et non une opération qui porte sur une instance de T.
En Java, il n'y a aucun moyen d'exprimer une telle chose : les opérations dans les classes génériques ne peuvent être définies que comme des opérations qui portent sur des instances. Et quand on a un type générique T en Java, on ne peut pas non plus écrire "new T()" ou "T.class"
Bref, c'est peut-être possible en utilisant les éléments les plus poussés de l'introspection (package java.lang.reflect), mais je ne connais pas vraiment de moyen de factoriser le code de création d'un singleton. En même temps, y a-t-il vraiment besoin de factoriser ceci (qui est thread-safe) ?
Code :
|
Marsh Posté le 26-03-2008 à 15:37:19
Bonjour,
je suis amenee pour mon projet a traduire des classes c++ en java.
je ne suis pas une pro ni en java ni en c++
voila la classe que je dois traduire :
C++
voila comment je l'ai traduit
java
j'utilise eclipse pour developper et il me souligne instance(); , j'ai essaye de mettre plusieurs trucs dont <T>.instance(); mais je n'arrive pas a trouver la solution
j'ai le message d'erreur suivant
The method instance() is undefined for the type SingletonCreator<T>
je vous remerci d'avance pour votre aide
Naya