繁体   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