2013-11-15 58 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; 
} 

} 
相關問題