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

avec Java Discussion :

Cast sur un type générique


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut Cast sur un type générique
    Bonsoir,

    Je suis en train de développer une application jms et j' ai un problème avec une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public boolean accept(M msg)
       {
           String mot = String(msg);     <-- erreur ici
           Pattern p = Pattern.compile(chainfilter);
           Matcher m = p.matcher(mot);
           boolean verif = m.matches();
           System.out.println(verif);
           return verif;
       }
    Le compilateur retourne une erreur quand je fais le cast sur M msg ce qui est logique car msg peut prendre n' importe quel type. Cependant je dois me contraindre à cette syntaxe et produire une String pour utiliser ma fonction regex p.matcher(<String>).
    Merci de m' éclairer.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    D'abord, ta notation n'est pas un cast, mais l'appel d'une méthode String() en luis passant comme paramètre msg. Cette méthode, a priori, n'existe pas.

    un cast de y vers le type X c'est

    Enfin, pour avoir un string qui représente un objet, en java, c'est la méthode "toString()" qu'on utilise.

    Mais je doute que ça te soit utile dans le cas présent, avec jms, je suppose que ce qui t'intéresse, c'est de récupérer le contenu du message. Et ça, ça dépend du type de message

    PS: mauvais idée d'attaquer des trucs comme jms quand on ne maitrise pas les bases du language.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut erreur
    désolé j' ai fait une erreur dans ma question c 'est çà que j' ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       public boolean accept(M msg)
       {
           String mot = (String) msg;      //               
           Pattern p = Pattern.compile(chainfilter);
           Matcher m = p.matcher(mot);
           boolean verif = m.matches();
           System.out.println(verif);
           return verif;
       }
    mais le probleme reste identique c 'est bien du jms le message est envoyé
    de facon générique (M msg)
    comment l' utiliser (à la reception) autrement que sous sa forme générique là est la question

  4. #4
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Tu crée un getter sur ton objet M qui revoit le message (en faisant éventuellement les conversions nécessaires) et le tour est joué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class M {
    	String msg = "message";
     
    	public void setMessage() {
    		//Ton code de récupération du message
    	}
     
    	//Le getter
    	public String getMsg() {
    		return msg;
    	}
    }
    Non ?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si M est un message jms, tu va devoir travailler en fonction du type de message.

    Si c'est un bytemessage, tu va devoir récupérer les byte et trouver les moyen de les afficher comme texte (par exemple en en faisant un byte64).
    Si c'est un TextMessage, en récupérer le texte. Si c'est une map => ? etc.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut programmation jms
    Bonsoir,

    J' essaye vos propositions et je vous tiens au courant de la suite

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut developpement JAVA
    Merci pour vos conseils
    mais voici la solution que j' ai trouvé

    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
     
     public boolean accept(M msg)
       {
           Object mot = null;
           if ((msg instanceof StringMessage))
           {
              mot = ((StringMessage)msg).getContent();   
           }
           String rec = (String) mot;
           Pattern p = Pattern.compile(chainfilter);
           Matcher m = p.matcher(rec);
           boolean verif = m.matches();
           System.out.println(verif);
           return verif;
       }
    Remonter sur la classe objet et faire un cast object->String
    çà fonctionne pour le moment........

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton code va lancer des NPE sur les autres types de message. Si tu te contente uniquement des StringMessage, ce code est beaucoup plus propre et évite les casts inutiles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public boolean accept(M msg)
       {       
           if (msg instanceof StringMessage){
              String rec = ((StringMessage)msg).getContent();   
              Pattern p = Pattern.compile(chainfilter);
              Matcher m = p.matcher(rec);
              boolean verif = m.matches();
              System.out.println(verif);
              return verif;
           } else 
              return false;
       }

Discussions similaires

  1. Appel de '.class' sur un type générique
    Par acarbenay dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2011, 15h10
  2. Réponses: 2
    Dernier message: 24/06/2009, 12h30
  3. [C#] Problème de Cast sur un type générique
    Par Bobbledople dans le forum C#
    Réponses: 2
    Dernier message: 10/06/2009, 11h04
  4. réflexion sur des types génériques
    Par ziad.shady dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2008, 12h25
  5. Warning sur type générique et tableau
    Par alex'l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/07/2007, 20h46

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