Web サーバーから XML をロードし、XML タグに基づいてオブジェクトを生成する BlackBerry アプリケーションを作成しています。これらの生成されたオブジェクトはすべて同じインターフェイスを実装し、使用前にこのインターフェイスにキャストされます。
最近、メッセージ アプリにメニュー項目を実装しました。これを選択すると、アプリが起動して画面がプッシュされます。この画面は、サーバーから XML を取得し、通常のようにオブジェクトを作成することが期待されています。これは、メニュー項目から呼び出されない限り機能します。
メニュー項目から呼び出されるとClassCastException
、ページ上の 1 つのタイプのオブジェクトのみを受け取ります。同様のオブジェクトは適切にキャストされ、このオブジェクトは、メニュー項目クラスからインスタンス化されていない場合に適切にキャストされます。
ここが興味深いところです: デバッガーで をClass.forName
XML タグで正常に実行すると、結果のClass
オブジェクトを強調表示して確認できます。
Class my.package.location.ClassName$MyAppName
メニュー項目から呼び出してクラスキャスト例外を取得すると、Class
オブジェクトは次のように表示されます
Class my.package.location.ClassName$XMLReflectionTest
どちらも私のオブジェクトを参照しているように見えますが、これがキャストが失敗する理由だと思います。
XMLReflectionTest
は私のプロジェクトのクラスでもサブクラスでもありませんが、Google は 2 つの検索結果しか返さず、どちらも多少関連していません。
他の場所でも問題なく動作し、同じメソッドを使用する異なるクラスでも問題なく動作します! 同じクラス文字列を使用して呼び出すと、呼び出しClass.forName
元に基づいて 2 つの「異なる」クラスが返されるのはなぜですか?
私は ClassLoaders を調べましたが、これが問題になる可能性がありますが、すべてのクラスではなく 1 つのクラスでのみ問題が発生するのはなぜですか?