なにこれ
- Java で、様々なクラスを文字列に変換するクラスです。
動作環境
- Java8 以上。
クラスの中身
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));
}
}
使い方
必要に迫られて書いたんだけれど、どんなシチュエーションだったか、間が空きすぎて忘れた。
String hoge = StringConverter<変換させたいクラス(convertersに定義してくれよな)>.convert(obj);
あとは総称型なかなか活用できる機会がなくて、使ってみたかった。
色々とミスってたら、すみません。