[英]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.