Guice を使用して汎用フィールドを特定の Java 型に変換する ASN.1 というファイル形式用のパーサーを作成したTypeLiteral.getFieldType(Field)
ので、正しい型を構築できます (Jackson や GSON のデータバインディングに似ています)。しかし、私はすでに Guava に依存しており、新しい TypeLiteral の代替品があるように見えるので、代わりに使用したいと思いますTypeToken
。Guave TypeTokenのドキュメントによると:
TypeToken
Guice のクラスに似ていますが、TypeLiteral
重要な違いが 1 つあります。しません。また、シリアライズ可能であり、多数の追加のユーティリティ メソッドを提供します。T
List<T>
List<? extends Number>
TypeLiteral
TypeToken
を使用してフィールドの具体化された型を取得できますTypeToken
か? つまり、グアバで次のことを行うにはどうすればよいですか?
import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
public static class A<T> {
T a;
}
public static class B {
A<String> b;
}
@Test
public void testTypeToken() throws SecurityException, NoSuchFieldException {
TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
}
}