StringConverter.java
private static class StringConverter<T> {
private static final List<StringConverter<?>> converters = Arrays.asList(
new StringConverter<>(String.class, String::toString),
new StringConverter<>(BigDecimal.class, BigDecimal::toPlainString),
new StringConverter<>(Date.class, Date::toString)
);
private final Class<T> clazz;
private final Function<T, String> converter;
static String convert(final Object object) {
if(object == null){
return null;
}
return converters.stream().filter(c -> c.isApplicable(object)).map(c -> c.doConvert(object)).findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unexpected class:" + object.getClass().getName()));
}
private StringConverter(final Class<T> clazz, final Function<T, String> converter) {
this.clazz = clazz;
this.converter = converter;
}
private boolean isApplicable(final Object object) {
return clazz.isInstance(object);
}
private String doConvert(final Object object) {
return converter.apply(clazz.cast(object));
}
}
Je l'ai écrit parce que j'en avais besoin, mais j'ai oublié de quel genre de situation il s'agissait parce qu'il y avait trop d'espace.
String hoge = StringConverter<La classe que vous souhaitez convertir(Veuillez le définir dans les convertisseurs)>.convert(obj);
Après cela, je n'ai pas eu la chance d'utiliser le type générique, donc je voulais l'utiliser.
Je suis désolé si j'ai fait beaucoup d'erreurs.
Recommended Posts