我希望标题能准确地表达我在这里所问的问题。对于这里的任务,我有一个Speakerphone对象,它是一个单例对象,以及两个接口,Listener和Talker,Speakerphone需要与它们通信。
有两个shoutMessage方法,第二个方法接受一个类对象作为参数。这就是我感到困惑的地方--我不知道指令中的“类对象”是指Listener接口,还是指Speakerphone对象。根据这里的说明,谁能告诉我这个方法中的代码是否正确?
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();
}
}
}发布于 2015-03-09 04:18:11
因此,shoutMessage方法中的类参数似乎就在那里,因此您可以只选择特定类型的侦听器。在Java语言中,Class是一个描述数据类型的对象--可以说是元数据的一个元。
根据代码中的注释,看起来您的shoutMessage方法做的可能与您想要的相反。下面是我认为它需要做的(基于该方法的注释):
Listener.class.isAssignableFrom确定当前监听器是否属于类cls.talker.getMessage()并将该消息传递给当前监听器(通过调用"receiveMessage“或"on”或监听器interface).cls https://stackoverflow.com/questions/28893209
复制相似问题