传递Class <! - ? - > cls作为方法参数?

时间:2014-07-09 23:11:21

标签: java class singleton

我无法完成此方法。

我正在尝试编写一个方法,让我的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?);

不是真的按照我到目前为止看到的例子。有什么建议吗?

2 个答案:

答案 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参数。