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 :

cast d'un objet soit integer soit double en double


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut cast d'un objet soit integer soit double en double
    Bonjour,

    C'est un de ces fameux pb de cast de Integer à Double impossible mais j'ai une petite subtilité. En effet, je ne controle pas la variable d'entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashMap<Integer, Double> action
    qui à ma grande surprise peut renvoyer un Double ou un Integer (mais aussi parfois BigDecimal) à l'appel de Du coup je ne peux pas utiliser de fonction propre à Integer pour passer à Double, il faut que si c'est un Double on ne fait rien et si c'est un Integer on passe en Double. Bien évidemment j'ai le soucis de la mémoire RAM en tête puisque cela se fait dans une boucle qui peut beaucoup itérer.

    Quels est la manière la plus intelligente de regler ce problème ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Peut-être que je n'ai pas compris le problème. Mais si on suppose qu'une variable "nombre" peut-être soit un integer, soit un double. Il est possible de résoudre le problème de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Double getDoubleForANumber(Integer number){
    return new Double(number);
    }
     
    Double getDoubleForANumber(BigDecimal number){
    return new Double(number);
    }
    Double getDoubleForANumber(Double number){
    return number;
    }
    Sachant que la méthode utilisé sera toujours la plus restrictive au niveau du type.

    Une autre manière serait de faire un test sur la classe de l'objet retourné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Double valueToUse=null;
    if( number isinstanceof Double){
       valueToUse=number;
    }
    else{
      valueToUse= new Double(number);
    }
    Cordialement,
    K
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Super ça fonctionne, merci à toi.
    De manière à gérer mieux le fait qu'il peut s'agir d'un nombre d'un format que je ne controle pas j'ai pris ta deuxième fonction (un peu à ma sauce) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((action.get(j) instanceof Double)?action.get(j):new Double(action.get(j)))

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Par contre cela ne marche pas pour BigDecimal dommage, du coup je vais changer mon fusil d'épaule

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Je comprends pas trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Map<Integer, Double> actions = ....;
    actions.get(0);
    Soit ça te renvoie un Double, soit tu te prends un ClassCastException.

    Vu que tu veux manipuler indépendamment des Integer, Double et BigDecimal. J'utiliserai la classe abstraite Number.


    PS : Il faut mieux utiliser la méthode Double.valueOf(double) plutôt que new Double(double)
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Je comprends pas trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Map<Integer, Double> actions = ....;
    actions.get(0);
    Soit ça te renvoie un Double, soit tu te prends un ClassCastException.
    En fait, pas forcément.

    Si tu fais ça, alors oui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Map<Integer, Double> actions = ....;
    Double action = actions.get(0);
    Mais si tu fais ça, non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Map untypedActions = new HashMap();
    untypedAction.put(Integer.valueOf(0), new Date());
    Map<Integer, Double> actions = untypedActions;
    Object action = actions.get(0);
    System.out.println(action);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/09/2014, 22h12
  2. Cast Objet.int => Integer
    Par Desktop dans le forum Langage
    Réponses: 2
    Dernier message: 06/04/2011, 08h43
  3. [C#] Evenements & cast de l'objet Sender
    Par Yannick038 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/09/2006, 15h34
  4. Réponses: 16
    Dernier message: 25/07/2006, 15h58
  5. Cast d'un objet d'une TObjectList
    Par maredami dans le forum Langage
    Réponses: 21
    Dernier message: 23/03/2006, 16h16

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