我有 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)的:
public class MessageWrapper<T> {
public T message;
}
或者:
private static class MessageWrapper<T> {
public T message;
}
关于Java 获取封闭泛型类型的类常量(Class<T1<T2>> 的实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47680475/