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));
}
}
Ich habe es geschrieben, weil ich es brauchte, aber ich habe vergessen, was für eine Situation es war, weil es zu viel Platz gab.
String hoge = StringConverter<Die Klasse, die Sie konvertieren möchten(Bitte definieren Sie es in Konvertern)>.convert(obj);
Danach hatte ich keine Chance mehr, den generischen Typ zu verwenden, also wollte ich ihn verwenden.
Es tut mir leid, wenn ich viele Fehler gemacht habe.
Recommended Posts