1个变量有2种不同的可能类型

时间:2016-08-03 13:06:10

标签: java variables types

我想在Java中完成这个:

  nested functions not implemented in this context

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 } HashMap是接口地图的实现。

我认为使用元组LinkedHashMap但这会弄脏很多代码。

3 个答案:

答案 0 :(得分:3)

只需将imp声明为Map,使用所需的类型参数进行参数化,然后使用具体类型进行分配。

HashMapLinkedHashMap都是Map,可以这样引用。

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

答案 1 :(得分:1)

我正在拍摄

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

请注意使用钻石操作符:不需要长时间拼写泛型。

以这种方式使用三元条件运算符意味着imp在声明和初始化之间永远不会处于未定义状态。

答案 2 :(得分:0)

查看集合中的继承树

enter image description here

你可以看到这两个类都可以实现为Map

所以你可以这样做:

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