Java 如何获取嵌套泛型类型的类类型?
假设我们有一个函数:Java 如何获取嵌套泛型类型的类类型?,java,generics,Java,Generics,假设我们有一个函数: void doSomething(Class<?> clazz); 如果我的类型是Foo,我怎么称呼doSomething 我想问题是什么是Foo.class的等价物 这可能吗 -更新-- 我会详细解释的 我有一个键入的bean: 类事件消息{ T有效载荷; 字符串类型 } 这种类型的对象转换为Json格式字符串,然后放入JMS队列; 消费者需要将其从字符串反jasonize为原始形式。 Json对象映射器需要知道要转换为的类型。 假设我的EventMessa
void doSomething(Class<?> clazz);
如果我的类型是Foo,我怎么称呼doSomething
我想问题是什么是Foo.class的等价物
这可能吗
-更新--
我会详细解释的
我有一个键入的bean:
类事件消息{
T有效载荷;
字符串类型
}
这种类型的对象转换为Json格式字符串,然后放入JMS队列;
消费者需要将其从字符串反jasonize为原始形式。
Json对象映射器需要知道要转换为的类型。
假设我的EventMessage负载是Offer类型,那么我想要这样的东西:
EventMessage offerEvent=jsonObjectMapper.readValuejsonMsg,
EventMessage.class
除了没有EventMessage.class这样的东西
问题在于EventMessage是一个类型化类,因此Json转换器在没有关于有效负载类型的额外信息的情况下不知道如何解析它。尝试以下方法:
doSomething((Class<Foo<Boo>>)Foo.class)
或者这个:
EventMessage<Offer> offerEvent = jsonObjectMapper.readValue(jsonMsg,
(Class<EventMessage<Offer>>) EventMessage.class);
.class是语言文字,而不是字段。也许您想向报告功能请求,因为只有一个Foo类对象。Foo和Foo不是不同的类;它们是同一个类,即使可以使用Foo.class,除了编译时类型之外,它也与Foo相同。但在第一个示例中,您并没有使用编译时类型,因为您要传递给Class类型的参数
在第二个示例中,您没有显示readValue的签名,但我假设它类似于T readValueJSONMessage,Class。这与您的第一个示例完全不同。在这种情况下,编译时类型有助于确定返回类型T。您可以操作类参数的类型:
EventMessage<Offer> offerEvent =
jsonObjectMapper.readValue(jsonMsg, (Class<EventMessage<Offer>>)
(Class<?>)EventMessage.class)
或者只使用原始类型,取回原始类型,并将其隐式转换为参数化类型:
EventMessage<Offer> offerEvent =
jsonObjectMapper.readValue(jsonMsg, EventMessage.class)
简单回答:你不能。详细回答:变通办法取决于你想做什么。这对你有什么好处?我认为doSomething无法访问类上的类型参数。泛型的更泛型。毕竟它一无所获。也许您不需要@SuppressWarnings和checkstyle,但不要将此作为坏做法来处理。方法参数的类型为Class。方法参数声明的类型为Class。调用的类型可以是Class afaik。参数表达式的类型将是Class sure,但这绝对不会给我们任何信息。
EventMessage<Offer> offerEvent =
jsonObjectMapper.readValue(jsonMsg, EventMessage.class)