Карта карт и дженериков - PullRequest
       12

Карта карт и дженериков

7 голосов
/ 11 сентября 2011

Я хочу создать (рекурсивную) карту карт. То есть значением типа «Карта» является другая карта того же типа, что и внешняя карта.

Например:

Map<String, Map<String, Map<String, ... >>>> foo;

Очевидно, мне нужен какой-то способ сослаться на "определяемый тип" или что-то для того, чтобы сделать это. Я думаю, я мог бы сделать:

Map<String, Map<String, ?>>

... а потом просто @SupressWarnings ("unchecked") самостоятельно преодолел неизбежные предупреждения, но есть ли лучший способ?

Ответы [ 2 ]

7 голосов
/ 11 сентября 2011

Создайте вспомогательный класс или интерфейс для ссылки на «определяемый тип». Как это:

class MyMap extends HashMap<String, MyMap> {
    ...
}

или

interface MyMap extends Map<String, MyMap> {

}

(Я не думаю, что вы можете обойтись без такого вспомогательного класса / интерфейса. Когда «рекурсивно» вам нужно имя для ссылки.)

0 голосов
/ 11 сентября 2011

В итоге то, что я сделал, было похоже на решение aioobe, но избегало прямого расширения любого конкретного класса карты:

class StringTrie {
 private final Map<String, StringTrie> map = ...;

 ...
}

Недостатком скрытия карты является то, что классу необходимо вручную выставлять любые интересные методы и передавать их на карту. В моем случае мне нужна была только пара, так что это сработало.

...