前提條件:在我的項目中,我有兩個分別定義請求和響應的一般類型接口。處理請求以產生響應,因此每個響應都基於請求構建。處理器接口處理請求以構建相應的響應。補充泛型類型
代碼:請求和響應接口是:
interface Request<T1>
和
interface Response<T2>
分別
,其中T2
和T1
代表通用請求和響應類型(我故意通過不同調用它們名稱爲清晰)。
現在,由於T2 是請求,和T1 是響應,因此上述碼發展到:
interface Request<T1 extends Response>
和
interface Response<T2 extends Request>
注意的是:請求和響應接口不共享任何繼承關係 - 以上代碼僅用於進行通信的是:請求僅使用某種其他類型(即響應)進行鍵入。
現在,考慮請求接口:由於響應被再次輸入,並且建立了一種請求的響應將被捆綁到原來的請求類型,因此,上面的代碼發展到:
interface Request<T1 extends Response<? extends Request<T1>>>
和現在
interface Response<T2 extends Request<? extends Response<T2>>
,處理器接口被定義爲:
interface Processor<R1 extends Request<R2>, R2 extends Response<R1>> {
R2 process(R1 request);
}
具體類:
要求執行:
class ConcreteRequest implements Request<ConcreteResponse> {
ConcreteResponse response;
...`
}
響應實現:
class ConcreteResponse implements Response<ConcreteRequest> {
ConcreteRequest request;
...
}
處理器實現:
class ConcreteProcessor implements Processor<ConcreteRequest, ConcreteResponse> {
ConcreteResponse process(ConcreteRequest request) {
...
}
}
問題:上面的代碼是否過度設計?是否有簡化的方法來表示補充輸入輸出對象的元組?
對不起,您能解釋一下這個嗎?'Request'爲什麼'T1''Request'會擴展'Response'類型? –
vijay
@Vijay:T1不是一個響應,它是泛型類型,它指示它最終會在處理後生成的響應...例如列表意味着一個包含字符串對象作爲其元素的列表......是你所詢問? –
Neel
通過'Request'和'Response'使用泛型,你會獲得什麼?一個簡單而具體的例子在這裏會有很長的路要走。 –