我很久没有接触过java了。但是给定以下c#语法,是否可以在java中创建泛型类型的未知示例?
public void Send(object message)
{
Type requestType = message.GetType();
ReceiverWrapper receiverInstance = (ReceiverWrapper)
Activator.CreateInstance(typeof(ReceiverWrapper<>).MakeGenericType(requestType));
// do something with the receiver...
}
所以我们的想法是 Object message
属于类型 Message1
. 我想创建一个 ReceiverWrapper<Message1>
.
我不想在方法签名-ala中使用泛型 public <T> void Send(T message)
我已经在java中理解了这一点。我很好奇我们是否可以从对象中提取类型信息并基于该类型创建泛型。
3条答案
按热度按时间lhcgjxsq1#
这里有几件事需要解释,首先var不是泛型类型。var将在编译时被实际类型替换,所以如果您想使用泛型,您可能不应该使用var。
我不太清楚你想用它做什么,但像这样的东西?
zynd9foi2#
“…是否可以在java中创建泛型类型的未知示例?”
对。这是可能的。但是只有在某些前提条件可以保证的情况下(参见代码中的注解)。
我用下面的片段概述了这项技术的要点。工作实验可以在线运行…
·····所以
Object message
属于类型Message1
. 我想创建一个ReceiverWrapper<Message1>
…“尽管你的问题
Send(Object)
方法返回void
,为了使我的概念证明更易于测试,我的实验实现返回了一个参数化类型的示例…用法示例…
实验结果…
他们说这不可能:)
idv4meu83#
我想创建一个
ReceiverWrapper<Message1>
.在java中没有这样的东西。只是
ReceiverWrapper
. java泛型主要是编译时工件。例如,如果您有一个类型为List<String>
你可以通过反射来确定,但是一个对象不是ArrayList<String>
,这只是ArrayList
.