2016-08-03 22 views
0

我想要做的正是這一點在Java中:2個不同的候選條件類型1的可變

boolean b; 
if (b) { 
    //I want that a variable "imp" be of type HashMap 
} else { 
    //I whant that a variable "imp" be of type LinkedHashMap 
} 

HashMapLinkedHashMap是實現接口映射的。我想用一個元組(HashMap, LinkedHashMap),但這太髒了代碼。

+0

'interface'不是'interfaz'。除此之外,還有什麼問題'Map imp'? – Thomas

回答

3

只需聲明impMap,用您所需的類型參數進行參數化,併爲其指定具體類型。

HashMapLinkedHashMap都是Maps並且可以這樣引用。

Map<MyKey, MyValue> imp = null; 
if (b) { 
    imp = new HashMap<MyKey, MyValue>(); 
} else { 
    imp = new LinkedHashMap<MyKey, MyValue>(); 
} 
+2

如果'imp'永遠不能是'null',我不會初始化它。 – Thomas

+0

完美的是,我非常感謝,非常感謝:) –

+0

@NahuelBrandan不客氣。 – Mena

1

我拍了

Map<MyKey, MyValue> imp = b ? new HashMap<>() : new LinkedHashMap<>();

注意使用鑽石操作的:沒有必要拼仿製藥出長手。

以這種方式使用三元條件運算符意味着imp從未處於聲明和初始化之間的未定義狀態。

+0

謝謝男人,如果我以前問過,我已經節省了很多時間 –

0

看看到繼承樹集合

enter image description here

中,你可以看到這兩個類可以實現爲一個地圖

所以你可以做:

Map<FooKey, FooValue> implementedMap = null; 
if (b) { 
    implementedMap= new HashMap<FooKey, FooValue>(); 
} else { 
    implementedMap= new LinkedHashMap<FooKey, FooValue>(); 
} 
相關問題