LoginSignup
1
0

More than 3 years have passed since last update.

Java8でジェネリクスを活用した汎用的なStringConverterクラス

Posted at

なにこれ

  • 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);

あとは総称型なかなか活用できる機会がなくて、使ってみたかった。

色々とミスってたら、すみません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0