2014-02-19 6 views
0

Я знаю, что у меня есть возможность создать объект POJO для его сохранения. Тем не менее, я пытаюсь сделать это во вложенном HashMap. Всякий раз, когда я делаю следующее, я получаю предупреждения о безопасности типа.Вложенные строки HashMaps

Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>(); 
map.put("fund_cde", new HashMap(){{put("ABC", "ABC is not valid message.");}}); 

Если установить вложенное HashMaps типа как так:

map.put("fund_cde", new HashMap<String, String>(){{put("ABC", "ABC is not valid message");}}); 

Я заканчиваю с этим предупреждением вместо:

сериализуемый класс не объявляет статическое конечный serialVersionUID поля типа длинного

Любые советы по правильному пути для этого? Я посмотрел на How to put/get values into/from Nested HashMap, но я все еще не понимаю.

Спасибо!

+1

Просто параметризировать ваш 'HashMap' в первом примере. И добавьте элементы на несколько строк. Эти анонимные классы грязны и нелегко читаемы. –

+1

Вторая правильная. Сериализуемость - отдельная проблема. – keshlam

+1

^^ Нет ничего плохого в том, что фрагмент кода вы опубликовали (вторая версия). Ошибка, которую вы сейчас получаете, исходит из кода, который вы не показываете нам (для написания простого двухстрочного теста кода, который вы показываете, вам будет сказано). –

ответ

-1

Если вы действительно хотите покончить с предупреждением. Либо включать идентификатор версии типа:

map.put("fund_cde", new HashMap(){ 
     private static final long serialVersionUID = 1L; 
     {put("ABC", "ABC is not valid message.");} 
}); 

или добавьте @SuppressWarnings («последовательный») аннотацию к методу. Если вы используете IDE, например eclipse, он может предложить вам эти параметры как автоматические исправления.

+0

Ум, это не проблема. 'Hashmap' уже реализует' Serializable' и имеет 'serialVersionUID' - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java # 1023 –

+0

Да HashMap делает, но анонимный класс этого не делает. Вы можете подтвердить это, пытаясь получить: новый HashMap () {{System.out.println (serialVersionUID);}} для компиляции. – user1945457

+0

И наоборот: новый HashMap () {private static final long serialVersionUID = 1L; {System.out.println (serialVersionUID);}} компилируется просто отлично. – user1945457

0

Существует еще один способ для достижения этой цели, если вы хотите, вы можете использовать, потому что я также попробовал в другой манере, что и дают warning.You могут использовать эту

Map<String,String> map1=new HashMap<String,String>(); 
    map1.put("ABC", "XYZ"); 
    Map<String ,Object> map=new HashMap<String,Object>(); 
    map.put("axz", map1); 
+0

@Bitzal Надеюсь, это поможет вам .plz сказать мне, если вы сочтете это полезным – Sheel

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