首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Class<?>表示接口

使用Class<?>表示接口
EN

Stack Overflow用户
提问于 2015-03-06 14:06:12
回答 1查看 51关注 0票数 0

我希望标题能准确地表达我在这里所问的问题。对于这里的任务,我有一个Speakerphone对象,它是一个单例对象,以及两个接口,ListenerTalkerSpeakerphone需要与它们通信。

有两个shoutMessage方法,第二个方法接受一个类对象作为参数。这就是我感到困惑的地方--我不知道指令中的“类对象”是指Listener接口,还是指Speakerphone对象。根据这里的说明,谁能告诉我这个方法中的代码是否正确?

代码语言:javascript
复制
public class Speakerphone extends Object {
    private static Speakerphone sSpeaker = null;
    private static HashSet<Listener> mListener = new HashSet<Listener>();
    private static HashSet<Talker> mTalker = new HashSet<Talker>();


    private Speakerphone() {
    }
    /*
     * get
     *
     * @return the singleton instance of Speakerphone (Speakerphone)
     */
    /************************************************
     *  ASSIGNMENT:
     *  Implement the get method
    /************************************************/
    public static Speakerphone get(){
        if (sSpeaker == null){
            sSpeaker = new Speakerphone();
        }
        return sSpeaker;
    }

/*
     * shoutMessage
     *
     * Sends the message to all of the Listeners tracked by Speakerphone
     *
     * @param talker a Talker whose message will be sent (Talker)
     * @return nothing
     */
    /************************************************
     *  ASSIGNMENT:
     *  Implement the shoutMessage method
    /************************************************/
    public void shoutMessage(Talker talker){
        Iterator<Talker> talkIterator = mTalker.iterator();
        while(talkIterator.hasNext())
        talkIterator.next().getMessage();
       }

    /*
     * shoutMessage
     *
     * Sends the message to all of the Listeners which are instances of
     * the cls parameter
     *
     * @param talker a Talker whose message will be sent (Talker)
     * @param cls a Class object representing the type which the Listener
     *            should extend from in order to receive the message (Class)
     * @return nothing
     *
     * HINT: see Class.isAssignableFrom()
     *       http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)
     */
    /************************************************
     *  ASSIGNMENT:
     *  Implement the shoutMessage method
    /************************************************/
    public void shoutMessage(Talker talker, Class<?> cls){

        if (Listener.class.isAssignableFrom(cls)){
        Iterator<Talker> talkIterator = mTalker.iterator();
        while(talkIterator.hasNext())
        talkIterator.next().getMessage();
       }
}

}
EN

回答 1

Stack Overflow用户

发布于 2015-03-09 04:18:11

因此,shoutMessage方法中的类参数似乎就在那里,因此您可以只选择特定类型的侦听器。在Java语言中,Class是一个描述数据类型的对象--可以说是元数据的一个元。

根据代码中的注释,看起来您的shoutMessage方法做的可能与您想要的相反。下面是我认为它需要做的(基于该方法的注释):

  1. 遍历mListener HashSet中的所有侦听器。对于监听器中的每个监听器,在遍历时执行以下忽略操作,使用Listener.class.isAssignableFrom确定当前监听器是否属于类cls.
  2. If,然后调用talker.getMessage()并将该消息传递给当前监听器(通过调用"receiveMessage“或"on”或监听器interface).
  3. If中定义的任何函数,该消息不是cls
  4. 的类型。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28893209

复制
相关文章

相似问题

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