@@ -548,44 +548,38 @@ public DecimalFormat (String pattern, DecimalFormatSymbols symbols) {
548
548
public final StringBuffer format (Object number ,
549
549
StringBuffer toAppendTo ,
550
550
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
+ };
567
564
}
568
565
569
566
@ Override
570
567
final StringBuf format (Object number ,
571
568
StringBuf toAppendTo ,
572
569
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
+ };
589
583
}
590
584
591
585
/**
@@ -1021,25 +1015,23 @@ StringBuf format(BigInteger number, StringBuf result,
1021
1015
@ Override
1022
1016
public AttributedCharacterIterator formatToCharacterIterator (Object obj ) {
1023
1017
CharacterIteratorFieldDelegate delegate =
1024
- new CharacterIteratorFieldDelegate ();
1018
+ new CharacterIteratorFieldDelegate ();
1025
1019
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" );
1043
1035
}
1044
1036
return delegate .getIterator (sb .toString ());
1045
1037
}
@@ -1790,22 +1782,23 @@ String fastFormat(double d) {
1790
1782
}
1791
1783
1792
1784
/**
1793
- * Sets the {@code DigitList} used by this {@code DecimalFormat}
1785
+ * Utility method that sets the {@code DigitList} used by this {@code DecimalFormat}
1794
1786
* instance.
1787
+ *
1795
1788
* @param number the number to format
1796
1789
* @param isNegative true, if the number is negative; false otherwise
1797
1790
* @param maxDigits the max digits
1791
+ * @throws AssertionError if provided a Number subclass that is not supported
1792
+ * by {@code DigitList}
1798
1793
*/
1799
1794
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 ()));
1809
1802
}
1810
1803
}
1811
1804
0 commit comments