Угадай где НПЕ, или где у вас чуйка? Java - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Разное / Other > Курилка / Yak floor

Курилка / Yak floor
Свободное общение, рассуждения на любые интересные вам темы.

Ответ
Опции темы
Непрочитано 16.10.2011, 00:33   #1
Аватар для VISTALL
Illussion is real

Автор темы (Топик Стартер) Угадай где НПЕ, или где у вас чуйка? Java

  1. package jds.izen;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. /**
  7.  * @author VISTALL
  8.  * @date 0:22/16.10.2011
  9.  */
  10. public class GenericTest
  11. {
  12. public static void main(String... arg)
  13. {
  14. Map<Integer, Long> v = new HashMap<Integer, Long>();
  15. v.put(1, 0L);
  16.  
  17. Long val = v.isEmpty() ? 0 : v.get(2);
  18.  
  19. System.out.println(val);
  20. }
  21. }
  22.  
Code: Java

Бывает есть НПЕ, бывает нет. Но НПЕ на линии

Long val = v.isEmpty() ? 0 : v.get(2);
Code: Java
Трейс

Цитата:
Exception in thread "main" java.lang.NullPointerException
at jds.izen.GenericTest.main(GenericTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main (AppMain.java:120)
VISTALL вне форума Ответить с цитированием
Непрочитано 16.10.2011, 00:52   #2
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

Код:
java.util.Map.get(Object key)
...
Throws:
...
NullPointerException - if the specified key is null and this map does not permit null keys (optional)
hex1r0 вне форума Ответить с цитированием
Непрочитано 16.10.2011, 00:54   #3
Аватар для VISTALL
Illussion is real

Автор темы (Топик Стартер) Re: Угадай где НПЕ, или где у вас чуйка? Java

Цитата:
Сообщение от hex1r0 Посмотреть сообщение
Код:
java.util.Map.get(Object key)
...
Throws:
...
NullPointerException - if the specified key is null and this map does not permit null keys (optional)
неа пойдем дальше

Добавлено через 1 минуту
лог ошибки показан, там нету Сообщения об ошибке

Последний раз редактировалось VISTALL; 16.10.2011 в 00:55. Причина: Добавлено сообщение
VISTALL вне форума Ответить с цитированием
Непрочитано 16.10.2011, 00:59   #4
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

оператор
Код:
x ? y : null
?
hex1r0 вне форума Ответить с цитированием
Непрочитано 16.10.2011, 01:00   #5
Аватар для VISTALL
Illussion is real

Автор темы (Топик Стартер) Re: Угадай где НПЕ, или где у вас чуйка? Java

O = x ? : y : null


O будет null
VISTALL вне форума Ответить с цитированием
Непрочитано 16.10.2011, 01:08   #6
Аватар для JavaDev
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

проблема в том что значение 0 в тернарном операторе прсится как примитив, соответсетвенно null из мапы туда же кастится по условию работы тернарного оператора, отсюда и грабли. Фикс будет такой:

public static void main(String... arg)
{
Map<Integer, Long> v = new HashMap<Integer, Long>();
v.put(1, 0L);

Long val = v.isEmpty() ? Long.valueOf(0) : v.get(2);

System.out.println(val);
}
__________________
Кто же мы? Сколько небес сожгли...
JavaDev вне форума Отправить сообщение для JavaDev с помощью ICQ Отправить сообщение для JavaDev с помощью Skype™ Ответить с цитированием
Непрочитано 16.10.2011, 01:11   #7
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

............
hex1r0 вне форума Ответить с цитированием
Непрочитано 16.10.2011, 01:11   #8
Аватар для VISTALL
Illussion is real

Автор темы (Топик Стартер) Re: Угадай где НПЕ, или где у вас чуйка? Java

Цитата:
Сообщение от JavaDev Посмотреть сообщение
проблема в том что значение 0 в тернарном операторе прсится как примитив, соответсетвенно null из мапы туда же кастится по условию работы тернарного оператора, отсюда и грабли. Фикс будет такой:

public static void main(String... arg)
{
Map<Integer, Long> v = new HashMap<Integer, Long>();
v.put(1, 0L);

Long val = v.isEmpty() ? Long.valueOf(0) : v.get(2);

System.out.println(val);
}
Long может быть нулл, НПЕ никак
VISTALL вне форума Ответить с цитированием
Непрочитано 16.10.2011, 01:12   #9
Аватар для JavaDev
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

не ошибка. это грабли автобокса, а тернанрый опетатор на них благополучно наступает при боксе / анбоксе значений. Я бы сказал - особенность поведения

Добавлено через 1 минуту
Цитата:
Сообщение от VISTALL Посмотреть сообщение
Long может быть нулл, НПЕ никак
не понял сути сообщения
__________________
Кто же мы? Сколько небес сожгли...

Последний раз редактировалось JavaDev; 16.10.2011 в 01:13. Причина: Добавлено сообщение
JavaDev вне форума Отправить сообщение для JavaDev с помощью ICQ Отправить сообщение для JavaDev с помощью Skype™ Ответить с цитированием
Непрочитано 16.10.2011, 01:16   #10
Пользователь

По умолчанию Re: Угадай где НПЕ, или где у вас чуйка? Java

Странно, что бывает что его нет о.0
Как бы 2 элемент не задан, так что оно всегда должен быть при таком раскладе.
Что бы не было пишем
Long val;
if (v.isEmpty())
val = 0L;
else
val = v.get(2);
TARAN вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PTS На Java,Java на PTS Cybersphere Lineage II 2 25.04.2011 19:16
Java SE niko42 Курилка / Yak floor 1 11.01.2011 19:31
java [Red Dragon] Lineage II 6 03.09.2010 09:00
Java virus Курилка / Yak floor 6 20.12.2008 03:50
Угадай игру GoRdon Курилка / Yak floor 139 15.11.2008 01:07


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 23:08. Часовой пояс GMT +3.

Вверх