我试图将代码从java移到c#,我遇到了代码语法问题。
因为在c#中不存在Class<?>
而我需要在newInstance()
内调用Class<?>
在java中我有:
private final Map< String, Class< ? extends AbstractAI>> aiMap = new HashMap< String, Class< ? extends AbstractAI>>(); //line code i need to move
public final AI2 setupAI(String name, Creature owner) {
AbstractAI aiInstance = null;
try {
aiInstance = aiMap.get(name).newInstance();//line code i need to move
}
catch (Exception e) {
log.error("[AI2] AI factory error: " + name, e);
}
return aiInstance;
}
如果你知道解决方案,请帮我把这个java代码移到c#中。感谢
答案 0 :(得分:0)
C#Generics的工作完全不同于Java Generics。看看C# vs Java generics。
可能的解决方案:
public abstract class Factory
{
private Factory()
{
}
public abstract AbstractAI CreateInstance();
public class Implementation<T> : Factory where T : AbstractAI, new()
{
public override AbstractAI CreateInstance()
{
return new T();
}
}
}
以下课程:
$ORACLE_HOME
假设AbstractAI扩展/实现类/接口AI2