Наткнулся на это, проверяя мой код обработки ошибок. Когда вы вызываете Integer.parseInt(null)
, Java выдает исключение NumberFormatException, тогда как Float.parseFloat(null)
выдает исключение NullPointerException. См. также документацию для Плавать и Целое число.
Есть ли какая-то конкретная техническая или конструктивная причина этой разницы, или это просто историческая причуда?
Они оба могут делать и то, и другое, но поскольку NullPointerException
является непроверенным исключением, его не нужно объявлять. Один парень сделал, другой нет.
@ user207421 это не совсем так. Integer.parseInt(null) никогда не вызовет исключение NullPointerException, а создаст новое исключение NumberFormatException("null")
Это определенно исторический артефакт.
Это несоответствие и связанные с ним проблемы с документацией несколько раз поднимались как ошибка Java на протяжении многих лет. Например:
В самом раннем из них инженеры Sun, которым было поручено решить эту проблему, написали следующее:
It is reasonable to expect the same exceptions to be thrown for null; however, these api's are very old and may not be able to be changed at this point.
Will consider for Tiger. [That was Java 5.0]
2002-12-03
Потом через год:
Since the exception behavior is long-standing and specified in the JavaDoc, it is impractical to change either method's behavior at this time. Closing as will not fix.
2003-10-21
вероятно, исторические причины. Я вижу, что Long ведет себя как Integer, а Double как Float, и что Double.parseDouble и Float.parseFloat были введены позже (java 1.2). Я считаю, что поведение Double и Float имеет больше смысла, поэтому неудивительно, что они были введены позже.