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 :

listener java générique


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut listener java générique
    Bonjour,
    Je réalise un logiciel en java/swing en suivant le pattern mvc.
    Je fais communiquer la vue et le modèle en utilisant cette méthode.
    Le problème étant que lorsque le nombre de variables à écouter devient important, c'est assez lourd.
    J'ai réussi à rendre les méthodes addListener, removeListener et getListeners génériques mais j'obtiens un warning (type safety) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public void addListener(Class listenerClass,EventListener listener){
    		listeners.add(listenerClass, listener);
     
    	}
     
    	public void removeListener(Class listenerClass, EventListener listener){
    		listeners.remove(listenerClass, listener);
    	}
     
    	public SpeedSimulationListener[] getListener(Class listenerClass){
    		return listeners.getListeners(listenerClass);
    	}
    Edit: j'ai finalement résolu ce problème

    Pour les méthodes fire, je me demandais si il était possible de les ajouter automatiquement avec eclipse (comme on fait pour les getters et les setters).
    Merci d'avance.

  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
    Le warning viens du fait que ton paramètre Class n'est pas typé alors que c'est une paramètre générique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void addListener(Class<?> listenerClass,EventListener listener){
    voir pour bien typer l'animal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void <T extends EventListener> addListener(Class<T> listenerClass,T listener){
    Si tu as déjà ces méthodes add/remove/get sur un conteneur "listeners", tu peux juste faire dans le menu source => generate delegate methods

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci ça fonctionne

    Pour générer automatiquement, je parlais des méthodes fire :

    Par exemple si je déclare une variable dans mon modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int speedSimulation;
    Je voudrais pouvoir créer automatiquement la méthode (ainsi que les interfaces nécessaires)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected void fireSpeedSimulationChanged(int speedSimulation) {
    		for (SpeedSimulationListener listener : getSpeedSimulationListener(SpeedSimulationListener.class)){
    			listener.speedSimulationChanged(speedSimulation);
    		}
     
    }

  4. #4
    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 tu commence à mettre un listener sur chaque propriété, tu ne va pas t'en sortir. Si tu veux surveiller l'état d'un objet, fait plutot un listener plus global genre SimulationStateChanged.

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    C'est ce que je fais d'habitude mais du coup je suis obligé de relire tout l'état même ce qui n'a pas été modifié.

  6. #6
    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
    Et si tu met un listener sur chaque propriété, tu va créer énormément de bruit dans ton code. Sans parler du spaghetti que ça va vite devenir avec les event qui modifient qui lance d'autres event qui modifient et tu va vite être coincé par des boucles d'event, donc encore plus de code pour en sortir. Et je ne parle même pas de la galère à maintenir chaque changement.

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je parlais plus au niveau des performances mais c'est vrai que c'est plus simple comme ça.
    Merci à toi.

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

Discussions similaires

  1. Créer ses propres Listener Java
    Par bind ways dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 03/08/2011, 19h45
  2. Listener Java TcpClient C#
    Par Dex35 dans le forum C#
    Réponses: 0
    Dernier message: 04/02/2010, 11h16
  3. Listener Java sur un dossier
    Par SamiGo dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 16/02/2009, 16h45

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