我来自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;
}
您可以尝试的是:
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;
}