Я использую рекурсивное дерево хэшмапов, в частности карту Hashmap, где Object является ссылкой на другой Hashmap и т. Д. Это будет роздано рекурсивным алгоритмом:Java Generics Type Предупреждение о безопасности с рекурсивным Hashmap
foo(String filename, Hashmap<String, Object> map)
{
//some stuff here
for (Entry<String, Object> entry : map.entrySet())
{
//type warning that must be suppressed
foo(entry.getKey(), (HashMap<String, Object>)entry.getValue());
}
}
Я знаю наверняка Object
имеет типа Hashmap<String, Object>
, но я раздражен, что я должен подавить предупреждение с помощью @SuppressWarnings("unchecked")
.
Я буду удовлетворен решением, которое делает либо assert(/*entry.getValue() is of type HashMap<String, Object>*/)
, либо генерирует исключение, если это не так. Я пошел по маршруту Generics для безопасности типа компиляции, и если я подавил предупреждение, то он победил цель.
Спасибо за ваши комментарии, KSB
dear waxwing, Я закончил реализацию второго предложения, потому что выясняется, что мне нужно добавить дополнительные вещи к «узлу», чем просто ссылку на другую хэш-карту. Это также кажется более естественным. Я просто разбираюсь с Java, поэтому не могу понять ваше первое предложение - часть «T extends Map». Еще раз спасибо, KSB –