0

我正在使用 Java on Singletons 进行练习,我必须使用 cls 参数才能完成它。我对 Java 很陌生,还没有遇到过这个问题。

public class Speakerphone extends Object{
public void shoutMessage()

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

  1. 留言
  2. 将消息发送到所有作为 cls 参数实例的侦听器

@param talker 一个将要发送消息的Talker (Talker)

@param cls 一个 Class 对象,表示 Listener 为了接收消息而应该扩展的类型(Class)

@return 什么都没有

4

1 回答 1

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);
        }
    }    
}
于 2015-07-21T18:12:32.617 回答