【问题标题】:CLS parameter in Singletons单例中的 CLS 参数
【发布时间】:2015-07-22 02:12:32
【问题描述】:

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

public class Speakerphone extends Object{
public void shoutMessage()

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

  1. shoutMessage
  2. 将消息发送到作为 cls 参数

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

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

@不返回任何内容

【问题讨论】:

  • 所以,你需要在shoutMessage()方法中添加2个参数。一个必须是Talker 类型,第二个必须是Class 类型。开始这样做怎么样?如果你不知道方法参数是什么,那么你不应该处理单例和监听器。从基本的东西开始。

标签: java singleton cls


【解决方案1】:

这样的?

说话者:

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

【讨论】:

  • 感谢您抽出宝贵的时间来写这篇文章。我会检查一下,看看它对我有什么作用。
  • 是的。我对它的 cls 参数部分仍然有些困惑。这就是代码的 和 c 部分所代表的意思吗?
  • 表示泛型,有助于在编译时检测错误。
猜你喜欢
  • 2018-12-21
  • 2019-11-12
  • 2020-02-06
  • 1970-01-01
  • 2012-08-11
  • 2017-03-16
  • 2010-11-06
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多