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
但为什么日志没有指出“cast”方法行?
我检查了文件夹frameworks/base/core,没有人调用方法“?java.lang.Class.cast(Object obj)”
有什么想法吗?

4

1 回答 1

2

我想不出这种行为的合乎逻辑的解释。如果事实与您报告的一样,那么我同意错误消息文本是错误的方法。

那么有哪些替代方案呢?

  • 您可能误读了日志文件。
  • 您可能正在查看源代码的错误版本。
  • 您可能已经发现了一个错误……尽管对于像这样基本的东西来说这似乎不太可能。(理论上,该错误可能是来自 VM 的错误消息、堆栈跟踪中的错误行号,甚至是导致它执行错误类型转换的编译器错误。)
  • 异常堆栈跟踪甚至有可能是假的……尽管这种解释近乎偏执。

我的建议是:

  • 尝试在调试器下运行代码,并单步执行该部分代码以确认您对异常原因和来源的看法。
  • 为这种行为创建一个 SSCE,看看其他人是否可以重现它。
于 2012-09-26T10:16:16.477 回答