1

どちらも下線なし:

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 言語の変更に対して更新されなかった理由は何ですか?

(実際には、OpenJDK 64 ビット サーバー VM、Java 1.7.0_136-icedtea を使用しています。)

4

2 に答える 2

3

ダブルを見ました。他の数字も似ていると思います:

Java 7 のvalueOfメソッドで指定された構文は、Java 6 のvalueOfメソッドから変更されていません。Java 7 の API は、アンダースコアが許可されていないことを明確に示しています。

アンダースコアは、解析可能な文字列ではなく、数値リテラルで許可されます。これはおそらく、Java 識別子による @Voo の意味でした。

于 2011-06-23T20:00:25.907 に答える
0

何よりも、パブリック API の署名を単に変更したいという理由だけで変更することはできないためです ;)

これらの新しい変更に従って浮動小数点数を解析するいくつかの追加のメソッドを実装できますが、これらのメソッドは Java 識別子ではなく数値を解析するために存在するため、その点で言語仕様が変更されたからといって、浮動小数点/整数を変更する必要があります。

また、Integer.valueOf もこれまでのところ「0x」を受け入れていないため、今から開始する理由はありません。

于 2011-06-23T19:37:22.010 に答える