关于匿名类的一个ClassCastException(java)

and*_*_su 5 java android anonymous-class classcastexception monkey

现在我得到一些如下的日志(log-1)

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


1010行

final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) obj.method();//line 1010
Run Code Online (Sandbox Code Playgroud)


我想,日志应该是这样的(log-2)

java.lang.ClassCastException: ClassA$1 cannot be cast to android.widget.LinearLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我会得到log-1,是不是?
如果log-1是正确的,那么我如何编写代码来创建这样的异常?

ps:我知道ClassA $ 1是一个匿名类.
ps:我在猴子测试中得到了这个日志,而且很难重新出现

有人告诉我:

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

那么日志就像log-1
但为什么日志没有指出"cast"方法行?
我检查文件夹框架/ base/core,没有人调用方法"?java.lang.Class.cast(Object obj)"的
任何想法?

Ste*_*n C 2

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

那么还有哪些替代方案呢?

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

我的建议是:

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