获取java.lang.reflect.Type的简单代码

pat*_*art 5 java generics reflection

GSON的 toJson 函数采用类型参数,该参数在反映对象时检查类型。这对于将对象反射到集合中非常有用。

然而,我能找到的获取类型的唯一方法是通过一组丑陋的编码扭曲:

//used for reflection only
@SuppressWarnings("unused")
private static final List<MyObject> EMPTY_MY_OBJECT = null;
private static final Type MY_OBJECT_TYPE;

static {
    try {
        MY_OBJECT_TYPE = MyClass.class.getDeclaredField("EMPTY_MY_OBJECT").getGenericType();
    } catch (Exception e) {
        ...
    }   
}

private List<MyObject> readFromDisk() {

    try {
        String string = FileUtils.readFileToString(new File(JSON_FILE_NAME), null);
        return new Gson().fromJson(string, MY_OBJECT_TYPE);
    } catch (Exception e) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在不引用内部类变量的情况下初始化类型?伪代码看起来像这样:

private static final Type MY_OBJECT_TYPE = TypeUtils.generate(List.class, MyObject.class);
Run Code Online (Sandbox Code Playgroud)

Dan*_*nny 5

JavadoctoJson看起来可以回答您的问题

typeOfSrc - src 的特定泛型类型。您可以使用 TypeToken 类获取此类型。例如,要获取 Collection 的类型,您应该使用:

Type typeOfSrc = new TypeToken<Collection<Foo>>(){}.getType();
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中。

private static final Type MY_OBJECT_TYPE = new TypeToken<List<MyObject>>(){}.getType();
Run Code Online (Sandbox Code Playgroud)