【发布时间】:2011-05-12 15:13:22
【问题描述】:
在 Java 中,我可以使用通配符“?”指定泛型。可以创建这样的地图:
Map<String, ?>.
我正在使用 C#,我需要一个 Dictionary<String, SomeInterface<?>>(其中 ? 可以是 int、double 或任何类型)。这在 C# 中可行吗?
编辑:
例子:
interface ISomeInterface<out T>{
T Method();
void methodII();
}
class ObjectI : ISomeInterface<int>{
...
}
class ObjectII : ISomeInterface<double>{
...
}
class ObjectIII : ISomeInterface<string>{
....
}
我试图将这些对象映射到字典中,例如:
Dictionary<String, ISomeInterface<?>> _objs = new Dictionary<String, ISomeInterface<?>();
_objs.Add("Object1", new ObjectI());
_objs.Add("Object2", new ObjectII());
_objs.Add("Object3", new ObjectII());
foreach(var keyVal in _objs){
Console.WriteLine(keyVal.Method());
}
实现 ISomeInterface 的对象在运行时使用 Assembly 和 Activator.createInstance 加载。在创建的那一刻,如果对象实现 ISomeInterface<int> 或 ISomeInterface<double>,我不会。
非常感谢任何帮助。
【问题讨论】:
-
我不太懂Java,但
?不会和Object一样吗? -
是的,
?是Object。更出乎意料的是,你在里面写的anything居然是Object,因为Java的VM实际上并不支持泛型,所以它们在编译时都会被抹掉。
标签: c# java .net generics covariance