@@ -548,44 +548,38 @@ public DecimalFormat (String pattern, DecimalFormatSymbols symbols) {
548548 public final StringBuffer format (Object number ,
549549 StringBuffer toAppendTo ,
550550 FieldPosition pos ) {
551- if (number instanceof Long || number instanceof Integer ||
552- number instanceof Short || number instanceof Byte ||
553- number instanceof AtomicInteger ||
554- number instanceof AtomicLong ||
555- (number instanceof BigInteger &&
556- ((BigInteger )number ).bitLength () < 64 )) {
557- return format (((Number )number ).longValue (), toAppendTo , pos );
558- } else if (number instanceof BigDecimal ) {
559- return format ((BigDecimal )number , StringBufFactory .of (toAppendTo ), pos ).asStringBuffer ();
560- } else if (number instanceof BigInteger ) {
561- return format ((BigInteger )number , StringBufFactory .of (toAppendTo ), pos ).asStringBuffer ();
562- } else if (number instanceof Number ) {
563- return format (((Number )number ).doubleValue (), toAppendTo , pos );
564- } else {
565- throw new IllegalArgumentException ("Cannot format given Object as a Number" );
566- }
551+ return switch (number ) {
552+ case Long l -> format (l .longValue (), toAppendTo , pos );
553+ case Integer i -> format (i .longValue (), toAppendTo , pos );
554+ case Short s -> format (s .longValue (), toAppendTo , pos );
555+ case Byte b -> format (b .longValue (), toAppendTo , pos );
556+ case AtomicInteger ai -> format (ai .longValue (), toAppendTo , pos );
557+ case AtomicLong al -> format (al .longValue (), toAppendTo , pos );
558+ case BigInteger bi when bi .bitLength () < 64 -> format (bi .longValue (), toAppendTo , pos );
559+ case BigDecimal bd -> format (bd , StringBufFactory .of (toAppendTo ), pos ).asStringBuffer ();
560+ case BigInteger bi -> format (bi , StringBufFactory .of (toAppendTo ), pos ).asStringBuffer ();
561+ case Number n -> format (n .doubleValue (), toAppendTo , pos );
562+ case null , default -> throw new IllegalArgumentException ("Cannot format given Object as a Number" );
563+ };
567564 }
568565
569566 @ Override
570567 final StringBuf format (Object number ,
571568 StringBuf toAppendTo ,
572569 FieldPosition pos ) {
573- if (number instanceof Long || number instanceof Integer ||
574- number instanceof Short || number instanceof Byte ||
575- number instanceof AtomicInteger ||
576- number instanceof AtomicLong ||
577- (number instanceof BigInteger &&
578- ((BigInteger ) number ).bitLength () < 64 )) {
579- return format (((Number ) number ).longValue (), toAppendTo , pos );
580- } else if (number instanceof BigDecimal ) {
581- return format ((BigDecimal ) number , toAppendTo , pos );
582- } else if (number instanceof BigInteger ) {
583- return format ((BigInteger ) number , toAppendTo , pos );
584- } else if (number instanceof Number ) {
585- return format (((Number ) number ).doubleValue (), toAppendTo , pos );
586- } else {
587- throw new IllegalArgumentException ("Cannot format given Object as a Number" );
588- }
570+ return switch (number ) {
571+ case Long l -> format (l .longValue (), toAppendTo , pos );
572+ case Integer i -> format (i .longValue (), toAppendTo , pos );
573+ case Short s -> format (s .longValue (), toAppendTo , pos );
574+ case Byte b -> format (b .longValue (), toAppendTo , pos );
575+ case AtomicInteger ai -> format (ai .longValue (), toAppendTo , pos );
576+ case AtomicLong al -> format (al .longValue (), toAppendTo , pos );
577+ case BigInteger bi when bi .bitLength () < 64 -> format (bi .longValue (), toAppendTo , pos );
578+ case BigDecimal bd -> format (bd , toAppendTo , pos );
579+ case BigInteger bi -> format (bi , toAppendTo , pos );
580+ case Number n -> format (n .doubleValue (), toAppendTo , pos );
581+ case null , default -> throw new IllegalArgumentException ("Cannot format given Object as a Number" );
582+ };
589583 }
590584
591585 /**
@@ -1021,25 +1015,23 @@ StringBuf format(BigInteger number, StringBuf result,
10211015 @ Override
10221016 public AttributedCharacterIterator formatToCharacterIterator (Object obj ) {
10231017 CharacterIteratorFieldDelegate delegate =
1024- new CharacterIteratorFieldDelegate ();
1018+ new CharacterIteratorFieldDelegate ();
10251019 StringBuf sb = StringBufFactory .of ();
1026-
1027- if (obj instanceof Double || obj instanceof Float ) {
1028- format (((Number )obj ).doubleValue (), sb , delegate );
1029- } else if (obj instanceof Long || obj instanceof Integer ||
1030- obj instanceof Short || obj instanceof Byte ||
1031- obj instanceof AtomicInteger || obj instanceof AtomicLong ) {
1032- format (((Number )obj ).longValue (), sb , delegate );
1033- } else if (obj instanceof BigDecimal ) {
1034- format ((BigDecimal )obj , sb , delegate );
1035- } else if (obj instanceof BigInteger ) {
1036- format ((BigInteger )obj , sb , delegate , false );
1037- } else if (obj == null ) {
1038- throw new NullPointerException (
1039- "formatToCharacterIterator must be passed non-null object" );
1040- } else {
1041- throw new IllegalArgumentException (
1042- "Cannot format given Object as a Number" );
1020+ switch (obj ) {
1021+ case Double d -> format (d .doubleValue (), sb , delegate );
1022+ case Float f -> format (f .doubleValue (), sb , delegate );
1023+ case Long l -> format (l .longValue (), sb , delegate );
1024+ case Integer i -> format (i .longValue (), sb , delegate );
1025+ case Short s -> format (s .longValue (), sb , delegate );
1026+ case Byte b -> format (b .longValue (), sb , delegate );
1027+ case AtomicInteger ai -> format (ai .longValue (), sb , delegate );
1028+ case AtomicLong al -> format (al .longValue (), sb , delegate );
1029+ case BigDecimal bd -> format (bd , sb , delegate );
1030+ case BigInteger bi -> format (bi , sb , delegate , false );
1031+ case null -> throw new NullPointerException (
1032+ "formatToCharacterIterator must be passed non-null object" );
1033+ default -> throw new IllegalArgumentException (
1034+ "Cannot format given Object as a Number" );
10431035 }
10441036 return delegate .getIterator (sb .toString ());
10451037 }
@@ -1790,22 +1782,23 @@ String fastFormat(double d) {
17901782 }
17911783
17921784 /**
1793- * Sets the {@code DigitList} used by this {@code DecimalFormat}
1785+ * Utility method that sets the {@code DigitList} used by this {@code DecimalFormat}
17941786 * instance.
1787+ *
17951788 * @param number the number to format
17961789 * @param isNegative true, if the number is negative; false otherwise
17971790 * @param maxDigits the max digits
1791+ * @throws AssertionError if provided a Number subclass that is not supported
1792+ * by {@code DigitList}
17981793 */
17991794 void setDigitList (Number number , boolean isNegative , int maxDigits ) {
1800-
1801- if (number instanceof Double ) {
1802- digitList .set (isNegative , (Double ) number , maxDigits , true );
1803- } else if (number instanceof BigDecimal ) {
1804- digitList .set (isNegative , (BigDecimal ) number , maxDigits , true );
1805- } else if (number instanceof Long ) {
1806- digitList .set (isNegative , (Long ) number , maxDigits );
1807- } else if (number instanceof BigInteger ) {
1808- digitList .set (isNegative , (BigInteger ) number , maxDigits );
1795+ switch (number ) {
1796+ case Double d -> digitList .set (isNegative , d , maxDigits , true );
1797+ case BigDecimal bd -> digitList .set (isNegative , bd , maxDigits , true );
1798+ case Long l -> digitList .set (isNegative , l , maxDigits );
1799+ case BigInteger bi -> digitList .set (isNegative , bi , maxDigits );
1800+ default -> throw new AssertionError (
1801+ String .format ("DigitList does not support %s" , number .getClass ().getName ()));
18091802 }
18101803 }
18111804
0 commit comments