2015-02-09 2 views
2

Я хочу иметь некоторую карту, которая содержит либокак пройти в карты неизвестной структуры/типа

<String, String> 
<String, Map<String, String>> 
<String, Map<String, String[]>> 

До сих пор я следующее:

Map<String, ?> any = new HashMap<String, ?>(); 

Когда я получить значения I хотите сделать что-то вроде значений valueof String [], но это не работает, потому что генерические элементы удаляются во время выполнения. Является ли способ, которым я неправильно отношусь к случайной структуре?

Какие существуют жизнеспособные варианты. В настоящее время я пытаюсь сделать что-то вроде.

values.get(0) instanceof String[] 

Чувства ... неправильный, любой вход?

EDIT: У меня есть карта для каждого типа структуры JSon Я хочу иметь дело с как Java Bean

class JAVABEAN{ 
    Map<String, String[]> structure1; 
    Map<String, Map<String, String>> structure2; 
    Map<String, ?> anyStructure; 
} 

anyStructure может иметь либо structure1 или структуре2 в нем, он содержит любую комбинацию (я больше чем 2 структуры в моем фактическом проекте).

Основываясь на карте детали в, я называю различные методы для обработки данных ..

for(each item in javabean) 
    if structure1, call method1.. 
    if structure2, call method2.. 
    if anyStructure, call method1 or method2 

Иногда anyStructure не будет использоваться на всех, но всегда будет по крайней мере 1 structure1 или structure2

EDIT2: Это услуга, называемая службой отдыха, которая в настоящее время занимается json. Я принимаю json, который превращается в java для меня через трикотаж, я считаю, что json должен быть простым для этого преобразования (без интерфейсов), поэтому я использую Map вместо чего-то вроде RangeQuery, который будет иметь String и String [] член.

+5

Вам нужно будет использовать «Map » и 'instanceof', но это, вероятно, плохой дизайн. Может быть, если бы вы рассказали нам о проблеме, которую пытаетесь решить, мы можем предложить лучший способ приблизиться к ней. – Radiodef

+3

Если ваши значения не имеют общего интерфейса, а их единственным общим предком является Object, все, что вы можете сделать, это использовать «Map » и использовать 'instanceof'. Вероятно, вы должны перенести значения в некоторые классы адаптеров, которые имеют общий интерфейс. –

+1

Почему вы хотите хранить эти разные виды карт в одном месте? Что вы можете сделать со всеми этими различными видами данных? Похоже, что они должны храниться по-разному и рассматриваться по-разному. –

ответ

4

Хорошо, я вижу вашу проблему. Просто используйте библиотеку JSON. Гссона или Джексона. Используйте объекты JSON, чтобы удерживать это вместе, вместо того, чтобы пытаться разрывать JSON в якобы эквиваленты Java, Map<String, Map<String, String[]>[] и такую ​​сложную бессмыслицу.

+0

Спасибо за идею, но в моей проблеме больше, чем я, я не могу сказать все, потому что ее работа связана , но есть хорошая причина для моей реализации Java. Я могу иметь более одной структуры, использующей одну и ту же структуру данных, но для разных запросов. Карта может использоваться для двух разных запросов, самый простой способ узнать, для чего я должен использовать, - иметь переднюю часть, знать, какой объект javascript поставить. Я думаю, может быть, я могу ошибаться, и я могу использовать интерфейсы для использования bean-компонентов, я должен проверить это. – gallly

+2

@CatznDogz не использует много вещей, которые нельзя использовать повторно. – djechlin

+0

@CatznDogz Но вы пришли сюда, потому что вы обнаружили, что дизайн на самом деле неудобен в использовании. – Radiodef

Смежные вопросы