IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Portage C vers Java


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut Portage C vers Java
    Bonjour, j'essaye de porter un code à partir du C, dans ce cas j'ai une classe templatisée, et j'ai des problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class vec3<T>
    {
        public T x;
        public T y;
        public T z;
     
        public vec3(vec3<T> vec)
        {
            this.x = vec.x;
            this.y = vec.y;
            this.z = vec.z;
        }
     
        public vec3(T x, T y, T z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
     
        public vec3<T> cross(vec3<T> vec)
        {
            return new vec3<T>(y*vec.z-z*vec.y, z*vec.x-x*vec.z, x*vec.y-y*vec.x);
        }
    La méthode cross ne compile pas, comment faut-il coder cette méthode en utilisant les générics ? (evidemment T ne peut prendre que des classes décrivant des nombres : int, float, double ....)

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par BakaOnigiri Voir le message
    La méthode cross ne compile pas
    Je vois mal effectivement comment elle pourrait compiler... A ce stade, je te suggère d'aller lire la FAQ pour comprendre l'utilisation des generics en java.

    Tout d'abord, T remplace un type objet (donc Integer, Float... mais pas int, float, etc.)
    Ensuite, si T est forcément un nombre, il est bien de l'expliquer à java qui ne peut difficilement le deviner... vec3<T extends Number>
    vec.x => ça ne risque pas de compiler si tu ne dis pas au compilateur que ton objet de type T a forcément un champ x... Il faudrait que tu déclares <T extends TaClasse> (avec TaClasse possédant des champs x, y, et z publics pour que cette syntaxe fonctionne). Mais le double héritage étant interdit, c'est incomptible avec "extends Number" (ce qui est logique : un enregistrement de 3 nombres n'est pas lui-même un nombre...)
    Etc., etc.

  3. #3
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut
    En effet quand je voulais dire int, float, ... je designais bien leur classes respectives, c'est une mauvaise habitude que je dois changer.

    Par contre je me doutais bien qu'il devais y avoir un truc du genre extends Number, merci c'est ce que je cherchais.

  4. #4
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut
    par contre, çà ne semble pas être suffisant :

    vec3.java:34: operator * cannot be applied to T,T
    return new vec3<T>((T)(y*vec.z-z*vec.y), (T)(z*vec.x-x*vec.z), (T)(x*vec.y-y*vec.x));
    Je sais pas quoi faire.

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Là tu vas avoir beaucoup de mal.

    Hormis par des grosses magouilles, tu ne peux pas créer de nouvelles instances d'un type paramétré: new T() est interdit dans TaClasse<T>.
    De même les casts en T sont interdits: "(T) truc" est donc également interdit.

    Cela est lié à l'implémentation des generics (qui sont "perdus" à l'exécution pour simplifier).

  6. #6
    Membre averti Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Points : 437
    Points
    437
    Par défaut
    ok, merci beaucoup, c'est pas grave, je me passerais de generics pour cette classe.

    Merci tout de même, le <T extends ...> pourra me servir plus tard.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Portage de code Delphi vers Java
    Par dtcSearch dans le forum Langage
    Réponses: 1
    Dernier message: 19/05/2010, 16h41
  2. portage c++ vers java, typedef
    Par rimas2009 dans le forum C++
    Réponses: 1
    Dernier message: 28/04/2009, 17h08
  3. Portage C++ vers java, problème de pointeur
    Par rimas2009 dans le forum C++
    Réponses: 1
    Dernier message: 28/04/2009, 17h00
  4. Portage Delphi vers Java ou C#?
    Par delphi5user dans le forum Langage
    Réponses: 4
    Dernier message: 20/04/2006, 09h44
  5. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo