2014-06-17 4 views
1

나는 Map의 실험을 시도하고 나는이 의심의 여지가 : 위의 코드의 함수 호출중첩 된 HashMaps을하고 선언

String output = FunctionA(input); 

잘하지만 변경 작업 것으로 보인다

Map<String, Object> input = new LinkedHashMap<String, Object>(); 
String operator = "in"; 
String argument = "foo"; 
String field = "AvailabilityStatus"; 
Map<String, Object> innerMap = new LinkedHashMap<String, Object>(); 
innerMap.put(operator, argument); 
input.put(field, innerMap); 

을 입력은 다음과 같습니다.

Map<String, Map<String, Object>> input = new LinkedHashMap<String, LinkedHashMap<String, Object>>(); 

같은 방식으로 함수를 호출 할 수 없습니다. functionA은 다음과 같습니다

public static String FunctionA(Map<String, Object> filters) throws Throwable { 
//logic goes here 
} 

두 진술이 아닙니다 본질적으로 같은 일을하려고?

+0

날 같은 way_는 등의 –

+0

정교한하시기 바랍니다 함수를 호출 할 수 _doesn't, 둘 다의 LinkedHashMap을 구현? – chipmunk

+2

'Map '및'Map >'는 같은 것이 아닙니다. 그게 당신이 요구하는 것입니까? –

답변

1

다른 방법으로는,이 같은 FunctionA 방법을 만들 수 있습니다! 나는지도와 중첩 된지도를 할 수없는 이유

FunctionA(new HashMap<String, LinkedHashMap<String, Object>>()); 
1

Map<String, Object>Object의 하위 유형인데도 은 Map<String, Object>의 하위 유형이 아닙니다.

사실, 후자에 원하는 모든 개체를 저장할 수 있지만 이전에는 Map<String, Object> 인스턴스 만 저장할 수 있습니다. 그래서 컴파일러는 을 인수로 취하는 메서드에 Map<String, Map<String, Object>>을 전달하지 못하게합니다.

이렇게하면 메서드에서 Strings, Integers 또는 Bananas를지도에 저장할 수 있으므로지도의 유형 안전성이 손상되며 이는 Map<String, Object> 인스턴스 만 포함한다고 가정합니다. 이 후 행복 할 것이다 이렇게

public static String FunctionA(Map<String, ? extends Object> filters) throws Throwable{ 
//logic goes here 
} 

: