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

标签 java generics jackson nested-generics

我有 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/

相关文章:

java - java中的日期格式

java - 使用通用数组

c# - 我怎样才能写一个通用的匿名方法?

java - 带有随机键的 JSON 到 Java 对象

java - 使用 Jackson 将 JSON 反序列化为包含集合的 Java 对象

java - Jmeter Http 代理服务器抛出 java.net.URISyntaxException : Illegal character in query at index error

java - 从 C 客户端向 Java 服务器发送一个整数

java - 有没有比使用多个 for 循环更好的方法来解决这个问题?

java - 通用类的 MessageBodyReader/Writer

java - 如何使用抽象类将 JSON 数据数组反序列化为 POJO?