首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单列CLS参数

单列CLS参数
EN

Stack Overflow用户
提问于 2015-07-21 17:51:07
回答 1查看 75关注 0票数 0

我正在用Java对单例进行练习,为了完成它,我必须使用cls参数。我对Java非常陌生,还没有遇到这种情况。

代码语言:javascript
复制
public class Speakerphone extends Object{
public void shoutMessage()

我必须完成以下操作才能完成代码。我如何利用cls参数来完成这个任务?

  1. shoutMessage
  2. 将消息发送给作为cls参数实例的所有侦听器。

@param talker他的信息将被发送( Talker )

@param表示侦听器为接收消息( Class )而应该扩展的类型的Class对象

@什么也不回

EN

回答 1

Stack Overflow用户

发布于 2015-07-21 18:12:32

像这样吗?

健谈者:

代码语言:javascript
复制
public interface Talker<T> {

    public T getMessage();
}

听众:

代码语言:javascript
复制
public interface Listener<T> {

    public void receive(T message);
}

免提电话:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31546200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档