2015-07-21 1 views
0

Je fais un exercice en Java sur Singletons et je dois utiliser le paramètre cls pour le compléter. Je suis très nouveau à Java et n'ai pas encore rencontré cela.Paramètre CLS dans Singletons

public class Speakerphone extends Object{ 
public void shoutMessage() 

Je dois faire ce qui suit pour compléter le code. Comment puis-je utiliser le paramètre cls pour terminer ceci?

  1. shoutMessage
  2. envoie le message à tous les auditeurs qui sont des instances de le paramètre cls

bavard @param un Talker dont le message sera envoyé (Talker)

@ param cls un objet Class représentant le type à partir duquel le récepteur doit s'étendre pour recevoir le message (Classe)

@return nothing

+0

Donc, vous devez ajouter 2 paramètres à la shoutMessage(). L'un doit être de type Talker, et l'autre doit être de type Class. Que diriez-vous de commencer à faire cela? Si vous ne connaissez pas les paramètres de la méthode, vous ne devriez pas encore traiter avec les singletons et les auditeurs. Commencez avec des trucs de base. –

Répondre

0

Quelque chose comme ça?

Talker:

public interface Talker<T> { 

    public T getMessage(); 
} 

Listener:

public interface Listener<T> { 

    public void receive(T message); 
} 

Speakerphone: Méthode

public final class Speakerphone { 

    public static final Speakerphone INSTANCE = new Speakerphone(); 
    private Map<Class, List<Listener>> listenersByTypes = new HashMap<>(); 

    private Speakerphone() { 
    } 


    public <T> void register(Listener<T> listener, Class<T> c){ 
     List<Listener> listeners = listenersByTypes.get(c); 
     if (listeners == null){ 
      listeners = new ArrayList<>(); 
      listenersByTypes.put(c, listeners); 
     } 
     listeners.add(listener); 
    } 

    public <T> void unregister(Listener<T> listener, Class<T> c){ 
     List<Listener> listeners = listenersByTypes.get(c); 
     if (listeners != null){ 
      listeners.remove(listener); 
     } 
    } 

    public <T> void shoutMessage(Talker<T> talker, Class<T> c) { 
     T message = talker.getMessage(); 
     List<Listener> listeners = this.listenersByTypes.get(c); 
     for (Listener<T> listener : listeners) { 
      listener.receive(message); 
     } 
    }  
} 
+0

Merci d'avoir pris le temps de l'écrire. Je vais regarder et voir comment cela fonctionne pour moi. –

+0

Oui en quelque sorte. Je suis encore un peu confus sur la partie des paramètres cls. Est-ce ce que représentent les parties et c du code? –

+0

représentent le générique, il aide à détecter les erreurs dans le temps de compilation. –