2013-11-15 24 views
0

我有一个<String, Lists>的地图,但是这些条目有不同类型的列表。如何把(字符串,列表<MyObject>)放入一个Map <String,List <Object>>

因此,第一项可能是put("cars", List<Cars>),第二项可能是put("bikes", List<Bikes>)

我宣布Map<String, List<Object>> myVehicles持有此。当我尝试将这些条目中:

List<Bikes> bikes = ... 
myVehicles.put("bikes", (List<Object>)bikes); 

我得到一个错误,“不能从演员阵容到列表”。我需要做什么?谢谢。

+0

您是否尝试过仿制药?像MyList 一样使用泛型,其中每次T可以取代汽车,自行车等...只是问题是你必须自己实现它,因为你将实现List接口。 –

回答

1

你应该声明你的地图为:

Map<String, List<? extends Object>> myVehicles = 
           new HashMap<String, List<? extends Object>>(); 

Map<String, List<Object>>是行不通的,因为你不能添加List<Bikes>其中需要List<Object>,因为泛型类型是不变。 A List<Bikes>不是List<Object>的子类,但它可以被List<? extends Object>捕获。

0

可以使用以下代码来声明:

Map<String, List<? extends Object>> objectsMap = new HashMap<String, List<? extends Object>>(); 

一个例子是如下:

MapTest类==>

import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class MapTest { 

public static void main(String[] args) { 

    Map<String, List<? extends Object>> objectsMap = new HashMap<String, List<? extends Object>>(); 

    //Put String List into Map 
    objectsMap.put("String", Arrays.asList("Hello","Java")); 


    //Put Object List into Map 
    objectsMap.put("Object", Arrays.asList(new Object(),new Object())); 

    //Put Car List into Map 
    objectsMap.put("Car", Arrays.asList(new Car("Band1"),new Car("Band2"))); 

    //Put Bike List into Map 
    objectsMap.put("Bike", Arrays.asList(new Bike("Band1"),new Bike("Band2"))); 

} 
} 

Car类==>

public class Car { 

private String band; 

public String getBand() { 
    return band; 
} 

public Car(String band) { 
    super(); 
    this.band = band; 
} 

public void setBand(String band) { 
    this.band = band; 
} 
} 

自行车类==>

public class Bike { 

private String band; 

public String getBand() { 
    return band; 
} 

public void setBand(String band) { 
    this.band = band; 
} 

public Bike(String band) { 
    super(); 
    this.band = band; 
} 

} 
相关问题