Map [] myArr, каждый с <K>Integer, <V>HashSet ... не может попасть в HashSet (Java) - PullRequest
0 голосов
/ 20 февраля 2011

Я не могу перейти к HashSets в моей структуре данных

Я объявил массив Map [] и заполнил его HashMap с K из Integer и V из HashSet из String, но не смог добавить элементы в HashSet.

Я сократил код, чтобы проиллюстрировать ...

private Map[] myMaps = null;

myMaps = new Map[numRepeats];
myMaps[0] = new HashMap<Integer,HashSet<String>>();
myMaps[0].put(0, new HashSet<String>());

Всплывающее окно в NetBeans показывает, что я могу добраться до java.util.Map с помощью

myMaps[0].

но при использовании метода map.get (0) я думал, что вернет HashSet

myMaps[0].get(0).

показывает, что я получил общий java.lang.object, а не HashSet. Так как мне нужно использовать метод HashSet.add (), это означает, что я застрял. Буду признателен за предложения.

Спасибо

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

Вам нужно привести его к HashMap<Integer,HashSet<String>>.

0 голосов
/ 20 февраля 2011

К сожалению, Java Generics усложняет использование массива универсального класса. Однако это возможно и решит вашу проблему безопасным способом.

первый. объявите вашу карту следующим образом

private Map<Integer,Set<String>>[] myMaps = null;

второй. используйте служебную функцию для выделения

@SuppressWarnings("unchecked")
public static <T> T[] newMapArray( int size )
{
    return (T[])java.lang.reflect.Array.newInstance(Map.class, size);
}

третий. выделить myMaps следующим образом

myMaps = newMapArray(numRepeats);
0 голосов
/ 20 февраля 2011

Когда вы определяете свою карту, вы можете определить ее с использованием всех задействованных типов, поэтому:

private Map<Integer, HashSet<String>>[] myMaps = null;

Тогда вам не придется возвращать его (при условии, что все ваши карты в myMaps будут такого типа).

...