1
구글 컬렉션을 사용하기 전에 나는 다음 코드와 유사한했다 :Google 컬렉션 'Multimap <?, Object>을 통해 반복하는 방법은 무엇인가요?
private Set<A> aSet = ...;
private Set<B> bSet = ...;
public Foo getFoo (Map<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
와 나는이 같은 전화를 걸 수 있었다 : 나는 할 수 없어, 같은 Multimap과 함께, 이제
Map<A, List<Bar> aMap = getAMap();
Foo f1 = getFoo (aMap, aSet);
Map<B, List<Bar> bMap = getBMap();
Foo f2 = getFoo (bMap, bSet);
을 :
public Foo getFoo (Multimap<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
예, 작동합니다. 그러나 나는 왜 우리가을 지정할 필요가 있는지 이해하지 못합니까? –
Roman
T는지도의 집합과 키의 요소가 동일한 유형인지 확인합니다 – nanda
다시 가져온 컬렉션이 멀티 맵 자체에 "연속 기입"이기 때문에 멀티 맵에서 키의 유형이 올바른지 확인해야합니다. (즉, 요소를 추가 할 수 있고 해당 항목이 멀티 맵에 표시되고 키가 잘못된 유형 인 경우 데이터가 손상되었을 수 있습니다). Map에는 그러한 걱정이 없으며 get()에 매개 변수 유형으로 Object를 사용할 때 절대적으로 옳습니다. –