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

时间:2012-09-26 09:39:02

标签: java android classcastexception anonymous-class monkey

现在我得到一些如下所示的日志(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
但为什么日志没有指出“演员”方法线呢? 我检查文件夹框架/ base / core,没有人调用方法“?java.lang.Class.cast(Object obj)”
任何想法?

1 个答案:

答案 0 :(得分:2)

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

那么有哪些替代方案?

  • 您可能会误读日志文件。
  • 您可能正在查看错误的源代码版本。
  • 你可能已经发现了一个错误......虽然这似乎不太可能像这样的基础。 (理论上,错误可能是来自VM的错误错误消息,堆栈跟踪中的错误行号,或者甚至导致它执行错误类型转换的编译器错误。)
  • 甚至有可能异常堆栈跟踪是假的......虽然这种解释与偏执有关。

我的建议是:

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