Java 获取 class 封闭泛型常量(Class<T1<T2>> 的实例)

Java get class constant for closed generic type (instance of Class<T1<T2>>)

我有 C# 背景,在使用 Java 泛型时遇到了问题。我正在尝试调用一个需要 Class<T> 实例作为参数的通用方法。通常这是通过 SimpleType.class 的问题。但在这种情况下,我需要的类型不是简单类型,而是有自己的类型参数,需要包含在 Class 实例中(即我需要一个 Class<OuterType<InnerType>>)。我如何获得这个?

注意:为了让事情更复杂一些,这是在另一个通用方法中进行的。因此,虽然 "outer" 类型在编译类型中已知,但内部仅通过其自身的 Class 实例已知。见代码:

public <T> T deserialize(InputStream stream, Class<T> clazz) {
    com.fasterxml.jackson.databind.ObjectMapper mapper = getJsonMapper();
    //Need an instance of Class<MessageWrapper<T>>
    MessageWrapper<T> wrapper = mapper.readValue(stream, MessageWrapper.class);
    return wrapper.message;
}

private class MessageWrapper<T> {
    public T message;
}

你可以试试这个:

public <T> T deserialize(InputStream stream, Class<T> clazz) {
    com.fasterxml.jackson.databind.ObjectMapper mapper = getJsonMapper();
    //Need an instance of Class<MessageWrapper<T>>
    MessageWrapper<T> wrapper =mapper.readValue(jsonString, new TypeReference<MessageWrapper<T>>() {});
    return wrapper.message;
}

此外,class 应该是静态的,或者 public 在它自己的文件中:

public class MessageWrapper<T> {
    public T message;
}

或者:

private static class MessageWrapper<T> {
    public T message;
}