Skip to content

Commit e865594

Browse files
authored
Provide factory to obtain JsonValue from java.lang.Number (#302)
Signed-off-by: Jorge Bescos Gascon <[email protected]>
1 parent 6029fe1 commit e865594

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

api/src/main/java/jakarta/json/Json.java

+11
Original file line numberDiff line numberDiff line change
@@ -517,4 +517,15 @@ public static String decodePointer(String escaped) {
517517
return escaped.replace("~1", "/").replace("~0", "~");
518518
}
519519

520+
/**
521+
* Creates a JsonNumber.
522+
*
523+
* @param value a JSON number
524+
* @return the JsonNumber for the number
525+
*
526+
* @since 2.1
527+
*/
528+
public static JsonNumber createValue(Number value) {
529+
return JsonProvider.provider().createValue(value);
530+
}
520531
}

api/src/main/java/jakarta/json/spi/JsonProvider.java

+28
Original file line numberDiff line numberDiff line change
@@ -477,4 +477,32 @@ public JsonNumber createValue(BigDecimal value) {
477477
public JsonNumber createValue(BigInteger value) {
478478
throw new UnsupportedOperationException();
479479
}
480+
481+
/**
482+
* Creates a JsonNumber.
483+
*
484+
* When it is not implemented it checks the type and delegates
485+
* to an existing method that already handles that type. It throws
486+
* UnsupportedOperationException in case the type is not known.
487+
*
488+
* @param number a JSON number
489+
* @return the JsonNumber for the number
490+
*
491+
* @since 2.1
492+
*/
493+
public JsonNumber createValue(Number number) {
494+
if (number instanceof Integer) {
495+
return createValue(number.intValue());
496+
} else if (number instanceof Long) {
497+
return createValue(number.longValue());
498+
} else if (number instanceof Double) {
499+
return createValue(number.doubleValue());
500+
} else if (number instanceof BigInteger) {
501+
return createValue((BigInteger) number);
502+
} else if (number instanceof BigDecimal) {
503+
return createValue((BigDecimal) number);
504+
} else {
505+
throw new UnsupportedOperationException(number + " type is not known");
506+
}
507+
}
480508
}

0 commit comments

Comments
 (0)