2016-12-02 89 views
5

我現在有地圖類實現了接口

class A {...} 
interface B {...} 

我想有是

HashMap<String, A implements B> 

即一些等價的,即一個String映射到的A任何情況下實現B 。但是該語法不能編譯。有沒有辦法映射到實現接口的類?還需要注意的是A不是通用的,所以我不能做這樣的事情

A<? implements B> 
+0

你的意思是'A'的任何子類實現'B'? –

+0

聞起來像一種代碼味道。你確定你的班級設計是正確的嗎? – biziclop

+0

@NicolasFilotto究竟是 – Sherz

回答

5

有可能在一個通用的背景下進行,例如,在一個通用的方法:

public <T extends A & B> void method() { 
    Map<String, T> map = new HashMap<>(); 
} 

不幸,我們不能將這些多重限制應用於通配符。

+0

看起來很有趣,但我在一個已經有返回值的方法中聲明瞭這個Map,所以我無法從簽名中獲得這個參數化。從技術上講,我可能會將其重構爲一個奇怪的getHashMap()方法,該方法僅基於簽名返回參數化映射,但這看起來很詭異。 – Sherz

+0

@Sherz,這裏的返回類型並不重要,該方法可以像'this一樣調用。 method()'其中'C'是'class C extends A implements B' – Andrew