[英]Passing Class<?> cls as a method parameter?
我在完成此方法时遇到麻烦。
我正在尝试编写一种方法,该方法将使我的主要对象传递两个参数:一个Talker对象实例,一个cls类对象代表侦听器应该从中扩展以便接收消息的类型。 我是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?);
并没有真正遵循到目前为止我看到的示例。 有什么建议么?
@BornToCode关于调用该方法是正确的,但是您要使用该方法实现的目标仍然有些错误。
cls.isAssignableFrom(cls.getSuperclass())
将始终返回false。 这是因为您不能接受父类并将其分配给子类。 我相信您正在寻找的是一种检查侦听器是否扩展了指定类的方法。 您可以通过获取侦听器的类来实现。
cls.isAssignableFrom(l.getClass())
或更简单
cls.isInstance(l)
我不明白cls
应该代表什么。 但是,您应该得到类似以下内容的信息:
singletonDemo.sMessage(demoTalker, SomeClass.class);
要么:
singletonDemo.sMessage(demoTalker, someClassInstance.getClass());
供您参考, cls.isAssignableFrom(cls.getSuperclass())
将始终返回false。 isAssignableFrom
的文档说:
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是该类或接口的超类或超接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.