簡體   English   中英

1個變量的2種不同的可能類型

[英]2 different possibles types for 1 variable

我想在Java中完全做到這一點:

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)但這會弄臟很多代碼。

只需將imp聲明為Map ,並使用所需的類型參數對其進行參數化,然后將其分配為具體類型。

HashMapLinkedHashMap都是Map ,可以這樣引用。

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

我會為

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

請注意使用Diamond運算符 :無需長期拼寫泛型。

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

看一下集合中的繼承樹

在此處輸入圖片說明

如您所見,兩個類都可以實現為Map

因此,您可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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