@@ -209,7 +209,9 @@ private Constructor<?> getConstructor(final Class<?> type,
209209 {
210210 for (final Constructor <?> ctor : type .getConstructors ()) {
211211 final Class <?>[] params = ctor .getParameterTypes ();
212- if (params .length == 1 && ConversionUtils .canCast (argType , params [0 ])) {
212+ if (params .length == 1 && //
213+ Types .isAssignable (Types .box (argType ), Types .box (params [0 ])))
214+ {
213215 return ctor ;
214216 }
215217 }
@@ -221,7 +223,7 @@ private boolean isArray(final Type type) {
221223 }
222224
223225 private boolean isCollection (final Type type ) {
224- return ConversionUtils . canCast (Types .raw (type ), Collection .class );
226+ return Types . isAssignable (Types .raw (type ), Collection .class );
225227 }
226228
227229 private Object
@@ -267,8 +269,8 @@ private Collection<Object> createCollection(final Class<?> type) {
267269 if (type .isInterface () || Modifier .isAbstract (type .getModifiers ())) {
268270 // We don't have a concrete class. If it's a set or a list, we use
269271 // the typical default implementation. Otherwise we won't convert.
270- if (ConversionUtils . canCast (type , List .class )) return new ArrayList <>();
271- if (ConversionUtils . canCast (type , Set .class )) return new HashSet <>();
272+ if (Types . isAssignable (type , List .class )) return new ArrayList <>();
273+ if (Types . isAssignable (type , Set .class )) return new HashSet <>();
272274 return null ;
273275 }
274276
@@ -312,7 +314,7 @@ public boolean canConvert(final Class<?> src, final Class<?> dest) {
312314 final Class <?> saneDest = Types .box (dest );
313315
314316 // OK for numerical conversions
315- if (ConversionUtils . canCast (Types .box (src ), Number .class ) && //
317+ if (Types . isAssignable (Types .box (src ), Number .class ) && //
316318 (Types .isByte (dest ) || Types .isDouble (dest ) || Types .isFloat (dest ) ||
317319 Types .isInteger (dest ) || Types .isLong (dest ) || Types .isShort (dest )))
318320 {
@@ -322,7 +324,7 @@ public boolean canConvert(final Class<?> src, final Class<?> dest) {
322324 // OK if string
323325 if (saneDest == String .class ) return true ;
324326
325- if (ConversionUtils . canCast (src , String .class )) {
327+ if (Types . isAssignable (src , String .class )) {
326328 // OK if source type is string and destination type is character
327329 // (in this case, the first character of the string would be used)
328330 if (saneDest == Character .class ) return true ;
0 commit comments