Java 番石榴罐头’;s TypeToken是否获取泛型字段的特定类型?

Java 番石榴罐头’;s TypeToken是否获取泛型字段的特定类型?,java,guava,Java,Guava,我为名为ASN.1的文件格式编写了一个解析器,它使用Guice的TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,这样我就可以构造正确的类型(类似于Jackson或GSON数据绑定)。但由于我已经依赖于Guava,而且它似乎有了一个新的TypeLiteral替换,所以我想使用TypeToken。根据报告: TypeToken类似于Guice的TypeLiteral类,但有一个重要区别:它支持非具体化类型,例如T、List甚至List-reified

我为名为ASN.1的文件格式编写了一个解析器,它使用Guice的
TypeLiteral.getFieldType(Field)
将通用字段转换为特定的Java类型,这样我就可以构造正确的类型(类似于Jackson或GSON数据绑定)。但由于我已经依赖于Guava,而且它似乎有了一个新的TypeLiteral替换,所以我想使用
TypeToken
。根据报告:

TypeToken
类似于Guice的
TypeLiteral
类,但有一个重要区别:它支持非具体化类型,例如
T
List
甚至
List-reifiedA=TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField(“B”);
assertEquals(String.class,reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField(“a”)).getRawType());
}
}

来自我的头脑,未经验证

Type t = B.class.getDeclaredField("b").getGenericType();
Class<?> p = TypeToken.of(t).resolve(
        /* T */  A.getTypeParameters()[0]).getRawType();
// p should be String.class
Type t=B.class.getDeclaredField(“B”).getGenericType();
类p=TypeToken.of(t).resolve(
/*T*/A.getTypeParameters()[0]).getRawType();
//p应该是String.class

谢谢,getGenericType()和resolve()是我所需要的。TypeToken reifiedA=TypeToken.of(B.class).resolveType(B.class.getDeclaredField(“B”).getGenericType());assertEquals(String.class,reifiedA.resolveType(reifiedA.getRawType().getDeclaredField(“a”).getGenericType()).getRawType());这个答案值得+50!我找了三天,你救了我的命!听到这个消息我很高兴:)
Type t = B.class.getDeclaredField("b").getGenericType();
Class<?> p = TypeToken.of(t).resolve(
        /* T */  A.getTypeParameters()[0]).getRawType();
// p should be String.class