我正在编写一个BlackBerry应用程序,它从Web服务器加载XML并根据XML标记生成对象。这些生成的对象都实现了相同的接口,并在使用前强制转换为此接口。
我最近在消息应用程序中实现了菜单项,选中后,启动我的应用程序并按下屏幕。这个屏幕应该从服务器获取XML并像平常一样创建对象 - 如果没有从菜单项中调用它,它就可以工作。
从菜单项调用时,我只收到页面上只有一种类型对象的ClassCastException
。类似的对象被强制转换,并且当它没有从菜单项类实例化时,该对象被强制转换。
以下是它的有趣之处:在调试器中,当正常对XML标记运行Class.forName
时,我可以突出显示生成的Class
对象以查看
Class my.package.location.ClassName$MyAppName
当我从菜单项调用它并获得类强制转换异常时,Class
对象显示为
Class my.package.location.ClassName$XMLReflectionTest
我想这就是演员阵容失败的原因,尽管两者似乎都是指我的对象。
XMLReflectionTest
不是我项目中的类或子类,但Google只返回两个搜索结果,这两个搜索结果都没有相关性。
它在其他任何地方都能正常工作,即使是使用相同方法的不同类也是如此! 为什么使用相同的类字符串调用Class.forName
会返回两个“不同”类,基于从哪里调用它?
我已经研究过ClassLoaders,我可能会遇到这个问题,但那么为什么这个问题只发生在一个类中,而不是所有类?