单身人士中的CLS参数

时间:2015-07-21 17:51:08

标签: java singleton cls

我正在用Singletons进行Java练习,我必须使用cls参数才能完成它。我是Java的新手,还没有遇到过这个问题。

public class Speakerphone extends Object{
public void shoutMessage()

我必须执行以下操作才能完成代码。如何利用cls参数完成此操作?

  1. shoutMessage
  2. 将消息发送给作为实例的所有侦听器   cls参数
  3. @param talker将发送消息的发送者(Talker)

    @param cls一个Class对象,表示Listener的类型                   应该延伸以便接收消息(Class)

    @return nothing

1 个答案:

答案 0 :(得分:0)

这样的东西?

发话方:

public interface Talker<T> {

    public T getMessage();
}

监听器:

public interface Listener<T> {

    public void receive(T message);
}

扬声器:

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);
        }
    }    
}