我正在将 C# 项目移植到 Java 中。我有一段看起来像这样的代码:
public abstract class A
{
public abstract void foo() throws Exception;
public abstract void bar();
}
然后,在别处……
public class FirstOuterClass {
public class FirstInnerClass extends A {
// defines foo() and bar()
}
}
更远的地方...
public class SecondOuterClass {
public class SecondInnerClass extends A {
// defines foo() and bar()
}
}
最后,在其他地方甚至更多......
HashMap<Type, A> handlers = new HashMap<Type, A>();
for (Entry e : HashMapOfStringToEntry.getTypes())
{
if(e.Handler != null) {
handlers.put(e.Type, (A) e.Handler);
}
}
e.Handler 可以是 FirstInnerClass 或 SecondInnerClass 类型。正是 e.Handler 与 (A) 的对话导致了以下错误:
java.lang.ClassCastException: java.lang.Class
我已经通过调试输出验证了 e.Handler 确实是 FirstOuterClass$FirstInnerClass 的类类型。因此,要么 C# 和 Java 之间的转换存在差异(可能),要么我没有在某处提供正确的语法(也可能)。
(我很抱歉没有粘贴整个代码,就像 HashMaps 的用途一样。我不想混淆真正的问题。基本上它是一个字符串键和几个扩展抽象 A 的类之间的映射。)