5

今、私は以下のようないくつかのログを取得します (log-1)

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to ClassA$1
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1010)
...


1010行目

final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) obj.method();//line 1010


ログは次のようになるはずです (log-2)

java.lang.ClassCastException: ClassA$1 cannot be cast to android.widget.LinearLayout$LayoutParams

なぜlog-1を取得するのか知りたいのですが、それは正しいですか?
log-1 が正しければ、そのような例外を作成するコードをどのように書くことができますか?

ps:ClassA$1 が無名クラスであることは知っています。
ps:このログはサルのテストで取得しましたが、再現するのは非常に困難です

誰か教えて :

MyInterface my = ClassA$1;//$1 is an anonymous class which implements MyInterface
my.getClass().cast(lp);

ログは log-1 のようになりますが
、ログが「キャスト」メソッド行を指摘していないのはなぜですか?
そして、私はフォルダーframeworks/base/coreをチェックします。誰もメソッドを呼び出しません "? java.lang.Class.cast(Object obj)"
何かアイデアはありますか?

4

1 に答える 1

2

その行動の論理的な説明は思いつきません。事実があなたが報告したとおりである場合、エラー メッセージのテキストが間違っていることに同意します。

では、代替手段は何ですか?

  • ログファイルを読み間違えている可能性があります。
  • ソース コードの間違ったバージョンを参照している可能性があります。
  • バグを見つけた可能性はありますが、これほど基本的なものではありそうにありません。(理論的には、バグは VM からの誤ったエラー メッセージ、スタック トレースの誤った行番号、または間違った型キャストを行う原因となるコンパイラのバグである可能性があります。)
  • 例外スタックトレースが偽物である可能性さえあります...その説明はパラノイアに接していますが。

私の提案は次のとおりです。

  • デバッガーでコードを実行し、コードのそのセクションを 1 ステップ実行して、例外の原因とソースについての確信を確認してください。
  • この動作の SSCE を作成し、他の人がそれを再現できるかどうかを確認してください。
于 2012-09-26T10:16:16.477 に答える