2012-11-06 14 views
1

我有一個抽象類Client和4名兒童Client1Client2 ...哪些參數應該是抽象方法

每一該客戶端線的

response = service.iszr(params); 

其中響應,而params取決於

in Class1這是

Client1ResponseType response 
Client1params params 

現在我想添加到抽象類方法:

protected abstract void sendRequest(?? response, ?? params); 

但我不知道應該是什麼類型的

我嘗試somethink這樣的:

protected abstract <I, O> void sendRequest(I input, O output); 

和兒童

@Override 
    protected <Client1ResponseType, Client1params> void sendRequest(Client1ResponseType input, 
     Client1params output) { 
    output = service.iszrRobCtiAifo(input); 
    } 

但沒有成功。有編譯錯誤。我做錯了什麼?

+0

查看我的回覆,我編輯了它。應該工作正常。 – HericDenis

回答

0

這個變體擴展到其他仿製藥在你的抽象類的聲明,你需要補充一點:

abstract class Client <I extends SOME_CLASS1, O extends SOME_CLASS2> 

哪裏SOME_CLASS1是第一個參數的子類型,SOME_CLASS2是第二個參數的子類型nt,如果需要的話,可以是Object

而且你的抽象方法是這樣的:

protected abstract void sendRequest(I response, O params); 

當你繼承類,你需要指定這些類型是這樣的:

class Client1 extends Client <Client1ResponseType, Client1params> 

請讓我知道如果你有任何問題。

+0

hm但問題是響應和參數生成的類不擴展什麼,我不能編輯它們我不能使用抽象類客戶端 hudi

+0

是的,你可以@hudi,每個類擴展對象(: – HericDenis

+0

@hudi然後使用'Object'作爲答案中提到的人,並根據需要進行類型轉換。 – Less

0

我無法完全理解你究竟在做什麼。

但有些方法,你想使它的通用?

嘗試對象

protected abstract void sendRequest(Object response, Object params); 

你可以像Object[]