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