Java泛型-获取属性名称和实际类型的映射[重复]

我为名为ASN.1的文件格式编写了一个解析器,该解析器使用Guice

TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,以便构造正确的类型(类似于Jackson或GSON数据绑定)。但是由于我已经依赖Guava了,而且它似乎有一个新的TypeLiteral替代品,所以我想使用它TypeToken。根据Guave

TypeToken文档:

TypeToken与Guice的TypeLiteral类相似,但有一个重要的区别:它支持非修饰类型,例如TList<T>甚至List<?

extends Number>; 虽然TypeLiteral没有。TypeToken也是可序列化的,并提供了许多其他实用程序方法。

您可以使用来获得字段的化类型TypeToken吗?换句话说,如何在Guava中执行以下操作?

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

}

}

回答:

从我的头上,未经验证

Type t = B.class.getDeclaredField("b").getGenericType();

Class<?> p = TypeToken.of(t).resolve(

/* T */ A.getTypeParameters()[0]).getRawType();

// p should be String.class

以上是 Java泛型-获取属性名称和实际类型的映射[重复] 的全部内容, 来源链接: utcz.com/qa/414972.html

回到顶部