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