@@ -803,67 +803,67 @@ public Type getOwnerType() {
803803 * The converted value.
804804 */
805805 public static Object toGenericType (Object value , Type type ) {
806- if (type instanceof Class <?> rawType ) {
807- return toRawType (value , rawType );
808- } else if (type instanceof ParameterizedType parameterizedType
809- && parameterizedType .getRawType () instanceof Class <?> rawType ) {
810- var actualTypeArguments = parameterizedType .getActualTypeArguments ();
811-
812- if (rawType == List .class ) {
813- if (value == null ) {
814- return null ;
815- } else if (value instanceof Collection <?> collection ) {
816- var elementType = actualTypeArguments [0 ];
817-
818- var genericList = new ArrayList <>(collection .size ());
806+ return switch (type ) {
807+ case Class <?> rawType -> toRawType (value , rawType );
808+ case ParameterizedType parameterizedType -> {
809+ var rawType = (Class <?>)parameterizedType .getRawType ();
810+ var actualTypeArguments = parameterizedType .getActualTypeArguments ();
811+
812+ if (rawType == List .class ) {
813+ if (value == null ) {
814+ yield null ;
815+ } else if (value instanceof Collection <?> collection ) {
816+ var elementType = actualTypeArguments [0 ];
817+
818+ var genericList = new ArrayList <>(collection .size ());
819+
820+ for (var element : collection ) {
821+ genericList .add (toGenericType (element , elementType ));
822+ }
819823
820- for (var element : collection ) {
821- genericList .add (toGenericType (element , elementType ));
824+ yield genericList ;
825+ } else {
826+ throw new IllegalArgumentException ("Value is not a collection." );
822827 }
828+ } else if (rawType == Map .class ) {
829+ if (value == null ) {
830+ yield null ;
831+ } else if (value instanceof Map <?, ?> map ) {
832+ var keyType = actualTypeArguments [0 ];
833+ var valueType = actualTypeArguments [1 ];
823834
824- return genericList ;
825- } else {
826- throw new IllegalArgumentException ("Value is not a collection." );
827- }
828- } else if (rawType == Map .class ) {
829- if (value == null ) {
830- return null ;
831- } else if (value instanceof Map <?, ?> map ) {
832- var keyType = actualTypeArguments [0 ];
833- var valueType = actualTypeArguments [1 ];
835+ var genericMap = new HashMap <>(map .size ());
834836
835- var genericMap = new HashMap <>(map .size ());
837+ for (var entry : map .entrySet ()) {
838+ genericMap .put (toGenericType (entry .getKey (), keyType ), toGenericType (entry .getValue (), valueType ));
839+ }
836840
837- for (var entry : map .entrySet ()) {
838- genericMap .put (toGenericType (entry .getKey (), keyType ), toGenericType (entry .getValue (), valueType ));
841+ yield genericMap ;
842+ } else {
843+ throw new IllegalArgumentException ("Value is not a map." );
839844 }
845+ } else if (rawType == Set .class ) {
846+ if (value == null ) {
847+ yield null ;
848+ } else if (value instanceof Collection <?> collection ) {
849+ var elementType = actualTypeArguments [0 ];
840850
841- return genericMap ;
842- } else {
843- throw new IllegalArgumentException ("Value is not a map." );
844- }
845- } else if (rawType == Set .class ) {
846- if (value == null ) {
847- return null ;
848- } else if (value instanceof Collection <?> collection ) {
849- var elementType = actualTypeArguments [0 ];
851+ var genericSet = new HashSet <>(collection .size ());
850852
851- var genericSet = new HashSet <>(collection .size ());
853+ for (var element : collection ) {
854+ genericSet .add (toGenericType (element , elementType ));
855+ }
852856
853- for (var element : collection ) {
854- genericSet .add (toGenericType (element , elementType ));
857+ yield genericSet ;
858+ } else {
859+ throw new IllegalArgumentException ("Value is not a collection." );
855860 }
856-
857- return genericSet ;
858861 } else {
859- throw new IllegalArgumentException ("Value is not a collection ." );
862+ throw new IllegalArgumentException ("Invalid type ." );
860863 }
861- } else {
862- throw new IllegalArgumentException ();
863864 }
864- } else {
865- throw new IllegalArgumentException ();
866- }
865+ case null , default -> throw new IllegalArgumentException ();
866+ };
867867 }
868868
869869 private static Object toRawType (Object value , Class <?> type ) {
0 commit comments