Java为封闭泛型类型(Class的实例)获取类常量 >)

问题描述 投票:0回答:1

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

注意:为了使事情变得更复杂,这是在另一个通用方法中发生的。因此,虽然“外部”类型在编译类型中是已知的,但内部仅通过其自己的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;
}
java generics jackson nested-generics
1个回答
1
投票

您可以尝试的是:

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;
}

同样,该类应该是静态的,或在其自己的文件中公开:

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

要么:

private static class MessageWrapper<T> {
    public T message;
}
© www.soinside.com 2019 - 2024. All rights reserved.