Почему методы valueOf / parse в классах чисел отклоняют допустимые числа в Java 7? - PullRequest
1 голос
/ 23 июня 2011

Ни одного подчеркивания:

scala> java.lang.Float.valueOf("1_2_3.4_5_6")
java.lang.NumberFormatException: For input string: "1_2_3.4_5_6"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1242)
    at java.lang.Float.valueOf(Float.java:416)

ни двоичные литералы не работают:

scala> java.lang.Byte.valueOf("0b01010101")
java.lang.NumberFormatException: For input string: "0b01010101"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Byte.parseByte(Byte.java:148)
    at java.lang.Byte.valueOf(Byte.java:204)
    at java.lang.Byte.valueOf(Byte.java:230)

По какой причине эти методы не были обновлены для изменений в языке Java?

(я работаю с 64-битной виртуальной машиной OpenJDK, Java 1.7.0_136-icedtea).

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Я посмотрел на Дабл.Я ожидаю, что другие числа похожи:

Синтаксис, определенный методом valueOf в Java 7, не изменился по сравнению с методом valueOf в Java 6. API Java 7 специальноуказывает, что подчеркивание недопустимо.

Подчеркивание будет разрешено в числовых литералах , а не в разборчивых строках.Скорее всего, это был смысл @ Voo по java-идентификаторам.

0 голосов
/ 23 июня 2011

Ну, прежде всего потому, что вы не можете просто изменить сигнатуру публичного API только потому, что вам это нравится;)

Они могут реализовать некоторые дополнительные методы, которые разбирают плавающие объекты в соответствии с этими новыми изменениями, нотогда эти методы предназначены для анализа чисел, а не идентификаторов java, так что просто потому, что спецификация языка изменилась в этом отношении, не означает, что анализ чисел с плавающей запятой / целых чисел должен быть изменен.

Также обратите внимание, что Integer.valueOf также не принял "0x", поэтому нет причин, почему они должны начинать с него сейчас.

...