public static <T> BeanReference<? extends T> convertBeanReference(Class<T> expectedType, Object value) { try { if ( expectedType.isInstance( value ) ) { return BeanReference.ofInstance( expectedType.cast( value ) ); } if ( value instanceof BeanReference ) { return ( (BeanReference<?>) value ).asSubTypeOf( expectedType ); } if ( value instanceof Class ) { Class<?> castedValue = (Class<?>) value; if ( !expectedType.isAssignableFrom( castedValue ) ) { throw log.invalidBeanType( expectedType, castedValue ); } @SuppressWarnings("unchecked") // Checked using reflection just above Class<? extends T> castedValueAsChildType = (Class<? extends T>) value; return BeanReference.of( castedValueAsChildType ); } if ( value instanceof String ) { return BeanReference.of( expectedType, (String) value ); } } catch (RuntimeException e) { throw log.invalidBeanReferencePropertyValue( expectedType, e.getMessage(), e ); } throw log.invalidBeanReferencePropertyValue( expectedType, "", null ); }
public static <T> BeanReference<? extends T> convertBeanReference(Class<T> expectedType, Object value) { try { if ( expectedType.isInstance( value ) ) { return BeanReference.ofInstance( expectedType.cast( value ) ); } if ( value instanceof BeanReference ) { return ( (BeanReference<?>) value ).asSubTypeOf( expectedType ); } if ( value instanceof Class ) { Class<?> castedValue = (Class<?>) value; if ( !expectedType.isAssignableFrom( castedValue ) ) { throw log.invalidBeanType( expectedType, castedValue ); } @SuppressWarnings("unchecked") // Checked using reflection just above Class<? extends T> castedValueAsChildType = (Class<? extends T>) value; return BeanReference.of( castedValueAsChildType ); } if ( value instanceof String ) { return BeanReference.of( expectedType, (String) value ); } } catch (RuntimeException e) { throw log.invalidBeanReferencePropertyValue( expectedType, e.getMessage(), e ); } throw log.invalidBeanReferencePropertyValue( expectedType, "", null ); }