我无法完成此方法。
我正在尝试编写一个方法,让我的main传递两个参数:一个Talker对象实例和cls一个Class对象,表示Listener应该从中扩展的类型,以便接收消息。我是Java的新手,可以使用一些帮助。
以下是该方法的代码:
public void sMessage(Talker talker, Class<?> cls) {
for ( Listener l : mParticipants)
{
if (cls.isAssignableFrom(cls.getSuperclass())) {
l.onMessageReceived(talker.getMessage());
}
}
}
不确定我应该如何完成此操作,或者如何从main进行调用:
singletonDemo.sMessage(demoTalker, Class?);
不是真的按照我到目前为止看到的例子。有什么建议吗?
答案 0 :(得分:2)
@BornToCode关于调用方法是正确的,但是你想用这个方法实现的目标仍然有些错误。
cls.isAssignableFrom(cls.getSuperclass())
将始终返回false。这是因为您无法获取父类并将其分配给子类。我相信你正在寻找的是一种检查监听器是否扩展指定类的方法。您可以通过获取侦听器的类来完成此操作。
cls.isAssignableFrom(l.getClass())
或更简单
cls.isInstance(l)
答案 1 :(得分:1)
我不明白cls
应该代表什么。但是,你应该得到类似的东西:
singletonDemo.sMessage(demoTalker, SomeClass.class);
或:
singletonDemo.sMessage(demoTalker, someClassInstance.getClass());
为了您的信息,cls.isAssignableFrom(cls.getSuperclass())
将始终返回false。 isAssignableFrom
的{{3}}说:
确定此Class对象表示的类或接口是否相同 as,或者是由...表示的类或接口的超类或超接口 指定的Class参数。