2012-02-16 11 views
0

ジェネリック型をサポートする値を変換するためのJavaライブラリを探しています。つまり、Foo<T>がある場合、ライブラリはStringFoo<String>またはFoo<Int>に変換することをサポートする必要があります。ジェネリック型を扱うことができるJava変換ライブラリですか?

もちろん、与えられたクラスは、その一般的なコンポーネントを伝えることができません。私の目的は、Beanに文字列値を移入することです。そのため、Beanのプロパティーをジェネリック・タイプ情報について調べることができます。

+2

ライブラリがfooを作成する方法を知っているだろうか? – jackrabbit

+0

通常、このようなことは、変換可能なものを宣言するカスタムコンバータの登録を許可することによって行われます。 – IttayD

+0

ライブラリが結果をFoo にキャストする安全な方法はありません。コンバーターには削除されたジェネリックが含まれているため、ライブラリーはどのコンバーターが特定の値をサポートしているかを知ることができません。 – jackrabbit

答えて

0

は、溶液の骨格である:

public interface Converter { 
    boolean canConvert(Class<?> sourceCls, Type targetType); 

    Object convert(Object source, Class<?> sourceClass, Type targetType) throws CannotConvertException; 
} 

は、ソース・タイプがClassであるが、ターゲットはTypeであることに注意してください。 Classの場合、既存のライブラリの1つにコードを委譲できます。 targetTypeParameterizedTypeの場合は、型引数(クラス)を取得できます。次に、標準ライブラリを使用してそれらに変換することができます。

使用するには、次のフィールドの

  • を:setterメソッドのためのType targetType = field.getGenericType()
  • Type targetType = method.getGenericParameterTypes()[0]
0

答えは、このようなライブラリはありません。

さらに、私はそれを作成することは可能だろうとは思わない。ここ

+0

確かに、1つではありません。しかし、私はこれを行うために私自身のユーティリティクラスを作成しました。それほど難しくありませんでした。そのトリックは、 'Class'ではなく 'Type'をコンバータの引数として使用することです – IttayD

関連する問題