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 :

Generics et spécialisation du code


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut Generics et spécialisation du code
    Je sais que l'idée des generics est plus dans la généralisation du code, mais je suis devant un problème qui nécécite de spécialiser le code pour obtenir un comportement plus juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* Cette classe permet d'écrire un objet sous plusieurs formats
     * pour permettre par exemple d'écrire des données quelconques en binaire,
     * en XML, sous formes de lignes de textes, etc...
     */
    class Writer<T extends Object> {
     
      /* La fonction to binary va par défaut retourner this.toString().getBytes()
       * mais dans le cas ou T est en fait la class Integer, il faudrait obtenir le
       * nombre en binaire et donc spécialiser le code de Writer pour T = Integer
       */
      byte[] toBinary();
    }
    Ma question est donc : Est-ce fesable sans passer par l'implémentation d'un code lourd avec des getClass ?

    Merci du coup de main :p
    Bizoux :p

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Que voudrais-tu renvoyer exactement lorsuq'il s'agit d'un Integer ???

    Un toString().getBytes() devrait aussi faire l'affaire... non ?

    a++

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    Justement non :
    L'idée c'est si j'ai un Integer avec une valeur de 20 (C'est à dire 0x14)
    J'obtienne {0x00, 0x00, 0x00, 0x14}

    Alors qu'avec toString().toBytes() j'aurais :
    {'1', '4', 0x00};

  4. #4
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 500
    Par défaut
    Tu peux faire cette décomposition en utilisant l'operateur >>>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i = xxx;
    byte b1 = (byte)i;
    byte b2 = (byte)(i>>>8);
    byte b2 = (byte)(i>>>16);
    byte b2 = (byte)(i>>>24);
    Et tu auras la décomposition que tu veux.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    Merci, mais en fait, j'ai du mal de faire comprendre : l'idée est de dissocier plusieurs cas :
    CAS 1 : T est un objet quelconque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    byte[] toBinary() {
      return objet.toString().getBytes();
    }
    CAS 2 : T est un Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    byte[] toBinary() {
      byte[] ret = new byte[4];
      ret[0] = (byte)objet;
      ret[1] = (byte)objet >> 8;
      ret[2] = (byte)objet >> 16;
      ret[3] = (byte)objet >> 24;
      return ret;
    }
    après on peu aussi considéré le cas ou T est un Float, un Long, un Byte, un Boolean, etc....

    Ce mécanisme existe en C++ mais mon programme doit être un java

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Utilise des instanceof pour vérifier le type de ton objet auxquel tu appliques ta transformation en binaire...

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  2. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 11h29
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 09h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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