public NumberMapper(Type type) { numberClass = (Class< ? extends Number>) type; converter = ValueConverter.findConverter(Number.class, numberClass); }
public static <S,T> Converter<S,T> findConverter(Class<S> sourceClass, Class<T> targetClass) { for (Class<S> candidateSourceClass: converters.keySet()) { if (candidateSourceClass==sourceClass) { Converter<S,T> converter = converters.get(candidateSourceClass).get(targetClass); if (converter!=null) { return converter; } } } Class superclass = sourceClass.getSuperclass(); if (superclass!=null) { return findConverter(superclass, targetClass); } return null; } }
public static <S,T> Converter<S,T> findConverter(Class<S> sourceClass, Class<T> targetClass) { for (Class<S> candidateSourceClass: converters.keySet()) { if (candidateSourceClass==sourceClass) { Converter<S,T> converter = converters.get(candidateSourceClass).get(targetClass); if (converter!=null) { return converter; } } } Class superclass = sourceClass.getSuperclass(); if (superclass!=null) { return findConverter(superclass, targetClass); } return null; } }
public static <S,T> T shoehorn(S foot, Class<T> shoe) { if (foot==null) { return null; } if (foot.getClass()==shoe) { return (T) foot; } Converter<S,T> converter = (Converter<S, T>) findConverter(foot.getClass(), shoe); return converter.convert(foot); }
public static <S,T> T shoehorn(S foot, Class<T> shoe) { if (foot==null) { return null; } if (foot.getClass()==shoe) { return (T) foot; } Converter<S,T> converter = (Converter<S, T>) findConverter(foot.getClass(), shoe); return converter.convert(foot); }