2012-05-31 4 views
0

Следуйте за кодовым блоком.Задача исключения исключения на карте со значениями типа Объект

Map<String, Object> personDetailMap = new HashMap<String, Object>(); 
personDetailMap.put("name", "isuru"); 
personDetailMap.put("is-male", true); 
(String)personDetailMap.get("is-male"); 

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

Мой вопрос personDetailMap будет возвращать объект Class Object, то почему он дает исключение для исключения из Boolean в String.

+0

Что вы пытаетесь достичь? – JMelnik

+1

«Неоднородные» карты, подобные этому, даже если вы можете заставить их технически работать, часто считаются запахами кода, которые вам лучше избегать. –

ответ

3

personDetailMap.put("is-male", true); хранит Boolean по боксу примитив boolean в объект. personDetailMap.get("is-male"); возврат тот же Boolean.

Затем вы пытаетесь лить Boolean в String, хотя эти 2 класса не имеют отношения. Бросок выходит из строя, и вы получаете это исключение.

Оператор (String) anObject; может работать только тогда, когда anObjectявляется строковое (String является окончательным, нет каких-либо суб-классы).

Если вы действительно хотите, чтобы преобразовать логическое значение в строку, вы можете использовать следующий метод:

+0

Или вы можете использовать String boolStr = personDetailMap.get ("is-male") + ""; – user1697575

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