2013-11-15 4 views
0

에 넣으려면 어떻게합니까? <String, Lists>의지도가 있지만 항목에 다른 유형의 목록이 있습니다.지도 (String, List <MyObject>)를지도 <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); 

"목록에서 목록으로 변환 할 수 없습니다"라는 오류 메시지가 나타납니다. 내가 무엇을해야 하나? 감사.

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

Map<String, List<Object>>

작동하지 않을 당신이 List<Object>이 필요로하는 List<Bikes>를 추가 할 수 없기 때문에 일반적인 유형 불변이기 때문에, :로

+0

당신이 제네릭을 시도 해 봤나? 제네릭을 MyList 과 같이 사용하십시오. 매번 T는 Cars, Bikes 등을 대체 할 수 있습니다. 다만 문제는 List 인터페이스를 구현할 때 직접 구현해야한다는 것입니다. –

답변

1

당신은지도를 선언해야합니다. List<Bikes>List<Object>의 하위 클래스가 아니지만 List<? extends Object>으로 캡처 할 수 있습니다. 다음과 같이

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

예는 다음과 같습니다 :

0

당신은 선언하려면 다음 코드를 사용할 수 있습니다

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"))); 

} 
} 

자동차 클래스를 ==>

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; 
} 

} 
관련 문제