我正在将一个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可以是e发送一种FirstInnerClass或SecondInnerClass。这是那次谈话e.Handler于(A)是导致以下错误:
java.lang.ClassCastException: java.lang.Class
我已经与调试输出e.Handler确实是一个类类型FirstOuterClass $ FirstInnerClass的验证。所以无论在C#& Java(可能)之间进行强制转换,还是在某处(也可能)都没有提供正确的语法。我很抱歉没有粘贴整个代码,就像HashMap的用处一样,我不想混淆真正的问题,基本上它是一个String键和几个扩展类之间的映射抽象答:)
它看起来很好,但为什么e.Handler的静态类型不是A,所以你避免了剧组,并从它的源头得到问题? – 2010-11-07 18:44:12
你可以提供更多关于HashMapOfStringToEntry的数据吗?你的foreach循环令人困惑。地图返回条目并且您正在使用其他内容。它看起来像返回Entry的本地实现,可能对此有所帮助。 –
Bivas
2010-11-07 18:47:16