1

我正在编写一个 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,我可能是问题所在,但是为什么这个问题只发生在一个类上,而不是所有类?

4

0 回答 0