簡體   English   中英

及格課程 <?> cls作為方法參數?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM