findViewById 中出现奇怪的 ClassCastException
Strange ClassCastException in findViewById
我观察到在线抛出一个奇怪的异常:
viewPager = (ViewPager) view.findViewById(R.id.pager);
异常如下所示:
java.lang.ClassCastException: android.support.v4.view.ViewPager cannot be cast to android.support.v4.view.ViewPager
我无法重现,但根据日志有时会发生。
该应用使用 gradle 的官方 multidex 构建。
根据 JLS,当您尝试将一个 class 转换为另一个 class 时会发生 ClassCastException
,这是很明显的。
不太明显的是Class身份的定义:
- classes 必须是 class、接口或数组类型,
- 它们必须具有相同的二进制名称,
- 它们必须由相同的有效加载
ClassLoader
在您的情况下,多个 ClassLoader
很可能会加载相同的 class。
我观察到在线抛出一个奇怪的异常:
viewPager = (ViewPager) view.findViewById(R.id.pager);
异常如下所示:
java.lang.ClassCastException: android.support.v4.view.ViewPager cannot be cast to android.support.v4.view.ViewPager
我无法重现,但根据日志有时会发生。
该应用使用 gradle 的官方 multidex 构建。
根据 JLS,当您尝试将一个 class 转换为另一个 class 时会发生 ClassCastException
,这是很明显的。
不太明显的是Class身份的定义:
- classes 必须是 class、接口或数组类型,
- 它们必须具有相同的二进制名称,
- 它们必须由相同的有效加载
ClassLoader
在您的情况下,多个 ClassLoader
很可能会加载相同的 class。