8336847: Use pattern match switch in NumberFormat classes

Reviewed-by: liach, naoto
This commit is contained in:
Justin Lu 2024-07-24 20:14:00 +00:00
parent 9e8e359513
commit 5a8861a3a1
3 changed files with 118 additions and 143 deletions

View file

@ -302,34 +302,34 @@ public abstract class NumberFormat extends Format {
public StringBuffer format(Object number,
StringBuffer toAppendTo,
FieldPosition pos) {
if (number instanceof Long || number instanceof Integer ||
number instanceof Short || number instanceof Byte ||
number instanceof AtomicInteger || number instanceof AtomicLong ||
(number instanceof BigInteger &&
((BigInteger)number).bitLength() < 64)) {
return format(((Number)number).longValue(), toAppendTo, pos);
} else if (number instanceof Number) {
return format(((Number)number).doubleValue(), toAppendTo, pos);
} else {
throw new IllegalArgumentException("Cannot format given Object as a Number");
}
return switch (number) {
case Long l -> format(l.longValue(), toAppendTo, pos);
case Integer i -> format(i.longValue(), toAppendTo, pos);
case Short s -> format(s.longValue(), toAppendTo, pos);
case Byte b -> format(b.longValue(), toAppendTo, pos);
case AtomicInteger ai -> format(ai.longValue(), toAppendTo, pos);
case AtomicLong al -> format(al.longValue(), toAppendTo, pos);
case BigInteger bi when bi.bitLength() < 64 -> format(bi.longValue(), toAppendTo, pos);
case Number n -> format(n.doubleValue(), toAppendTo, pos);
case null, default -> throw new IllegalArgumentException("Cannot format given Object as a Number");
};
}
@Override
StringBuf format(Object number,
StringBuf toAppendTo,
FieldPosition pos) {
if (number instanceof Long || number instanceof Integer ||
number instanceof Short || number instanceof Byte ||
number instanceof AtomicInteger || number instanceof AtomicLong ||
(number instanceof BigInteger &&
((BigInteger) number).bitLength() < 64)) {
return format(((Number) number).longValue(), toAppendTo, pos);
} else if (number instanceof Number) {
return format(((Number) number).doubleValue(), toAppendTo, pos);
} else {
throw new IllegalArgumentException("Cannot format given Object as a Number");
}
return switch (number) {
case Long l -> format(l.longValue(), toAppendTo, pos);
case Integer i -> format(i.longValue(), toAppendTo, pos);
case Short s -> format(s.longValue(), toAppendTo, pos);
case Byte b -> format(b.longValue(), toAppendTo, pos);
case AtomicInteger ai -> format(ai.longValue(), toAppendTo, pos);
case AtomicLong al -> format(al.longValue(), toAppendTo, pos);
case BigInteger bi when bi.bitLength() < 64 -> format(bi.longValue(), toAppendTo, pos);
case Number n -> format(n.doubleValue(), toAppendTo, pos);
case null, default -> throw new IllegalArgumentException("Cannot format given Object as a Number");
};
}
/**